---
metadata:
  - name: generator
    content: Diplodoc Platform v5.54.4
alternate:
  - https://yandex.com/dev/games/doc/en/sdk/sdk-multiplayer-sessions.md
  - https://yandex.com/dev/games/doc/hi/sdk/sdk-multiplayer-sessions.md
  - https://yandex.com/dev/games/doc/ko/sdk/sdk-multiplayer-sessions.md
  - https://yandex.com/dev/games/doc/ru/sdk/sdk-multiplayer-sessions.md
  - https://yandex.com/dev/games/doc/tr/sdk/sdk-multiplayer-sessions.md
  - https://yandex.com/dev/games/doc/vi/sdk/sdk-multiplayer-sessions.md
  - https://yandex.com/dev/games/doc/zh/sdk/sdk-multiplayer-sessions.md
  - href: hi/sdk/sdk-multiplayer-sessions.md
    type: text/markdown
    title: Markdown version
  - href: ../llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/dev/games/doc/hi/llms.txt

# एसिंक्रोनस मल्टीप्लेयर

`ysdk.multiplayer` मॉड्यूल की मदद से, आप एक प्रतियोगी मोड बना सकते हैं जो ऑनलाइन-मल्टीप्लेयर जैसा होता है। इसके लिए आपको आवश्यकता नहीं होगी:

- अपना खुद का सर्वर समाधान लिखने और उसे बनाए रखने की;
- विरोधियों को जल्दी खोजने के लिए खिलाड़ियों का आवश्यक क्रिटिकल मास प्राप्त करने की।

वह शैलियाँ, जिनकी कोर यांत्रिकी को आप SDK के माध्यम से लागू कर सकते हैं:

- **पहेलियाँ**: असिंक्रोनस सत्र आस-पास की गेमिंग फ़ील्ड्स पर खेले जा सकते हैं, समय या अंकों के आधार पर प्रतिस्पर्धा जोड़ी जा सकती है। उपयुक्त खेलों के उदाहरण: [कसिनका ऑनलाइन!](https://yandex.com/games/app/211144) (KosmosGames द्वारा), [Match Arena - थ्री इन ए रो!](https://yandex.com/games/app/96787) (PecPoc Piggy द्वारा)।
- **रनर्स और रेसिंग**: विरोधियों के सत्र ‘छायाओं’ के रूप में दिखाए जा सकते हैं, जो खिलाड़ी के साथ स्तर पर एक साथ चलती हैं (घोस्ट ड्राइवर यांत्रिकी)। उपयुक्त खेलों के उदाहरण: [वाइल्ड कार्स 2](https://yandex.com/games/app/374739) (JL studio द्वारा) ‘स्पीड रेस’ मोड में, [वाइल्ड मोटरसाइकल्स](https://yandex.com/games/app/233231) (haoda games द्वारा)।
- **रणनीतियाँ और ऑटोबैटलर्स**: अन्य खिलाड़ियों की रणनीतियों के खिलाफ युद्ध लागू किया जा सकता है। उपयुक्त खेलों के उदाहरण: [लुडुस](https://yandex.com/games/app/376147) (Positron Dynamics द्वारा), [Like a King](https://yandex.com/games/app/140656) (Vladimir Saponenko द्वारा), [TOYS: Crash Arena](https://yandex.com/games/app/291515) (Mad Pixel द्वारा)।



## अवधारणा {#concept}

1. उपयोगकर्ता ए खेलते हैं, SDK प्रमुख घटनाओं (कीप्रेस, स्थिति में परिवर्तन) को रिकॉर्ड करता है और उनके समय को दर्ज करता है।
2. ये घटनाएँ सर्वर पर एक टाइमलाइन (लेन-देन की सूची) के रूप में सहेजी जाती हैं।
3. जब उपयोगकर्ता बी खेल शुरू करता है, उसकी सत्र में पहले से सहेजी गई टाइमलाइनों से प्रतिद्वंद्वी लोड होते हैं।
4. SDK प्रतिद्वंद्वियों की क्रियाओं को वास्तविक समय में पुन: प्रकट करता है, जिससे एक साथ खेल का एहसास होता है।



## सत्र का प्रारंभ और लोडिंग {#init}

असिंक्रोनस मल्टीप्लेयर के साथ शुरू करने के लिए, `ysdk.multiplayer.sessions.init()` विधि को कॉल करें। यह प्रारंभिक प्रारंभ और प्रतिद्वंद्वियों की खेल सत्रों को लोडिंग करता है।

यह विधि [लोड किए गए सत्रों का एक एरे](#response-format) लौटाती है।

`count` पैरामीटर लोड करने के लिए सत्रों की संख्या निर्धारित करता है। जवाब में अधिकतम सत्रों की संख्या 10 है।

चयन के लिए `meta1`, `meta2`, `meta3` पैरामीटर का उपयोग होता है। ये ऑब्जेक्ट्स की रूप में होते हैं `{ min: %number%, max: %number% }` और [सत्र सहेजते समय](#push) सेट किए जाते हैं। उदाहरण के लिए, यदि `meta1` में खेल का स्कोर रखा जाता है और `meta2` में खिलाड़ी का स्तर होता है, तो आप इन पैरामीटरों के उपयोगकर्ता से सन्निकट सहेजे गए सत्रों को लोड कर सकते हैं।

{% note warning "चेतावनी" %}

सत्रों को लोड करने के लिए तीन `meta` पैरामीटरों में से कम से कम एक और `count` पैरामीटर को शून्य से अधिक सेट करना आवश्यक है। अन्यथा, मल्टीप्लेयर केवल लेखन के लिए प्राइत्रिति किया जाएगा।

{% endnote %}

{% list tabs %}

- अनुरोध का उदाहरण

  ```javascript
  ysdk.multiplayer.sessions.init({
    count: 2, // लोड करने के लिए विपक्षी सत्रों की संख्या (10 तक)।
    isEventBased: true, // घटनाओं के माध्यम से कार्य आरंभ करने के लिए ध्वज।
    maxOpponentTurnTime: 200, // विपक्षी की चाल की समय सीमा (एमएस)।
    [meta](*meta): {
      meta1: {
        min: 0,
        max: 6000,
      },
      meta2: {
        min: 2,
        max: 10,
      },
    },
  }).then(opponents => console.log(opponents));
  ```

- ES2017 async/await का अनुरोध उदाहरण

  ```javascript
  const work = async () => {
    const opponents = await ysdk.multiplayer.sessions.init({
      count: 2, // लोड करने के लिए विपक्षी सत्रों की संख्या (10 तक)।
      isEventBased: true, // घटनाओं के माध्यम से कार्य आरंभ करने के लिए ध्वज।
      maxOpponentTurnTime: 200, // विपक्षी की चाल की समय सीमा (एमएस)।
      [meta](*meta): {
        meta1: {
          min: 0,
          max: 6000,
        },
        meta2: {
          min: 2,
          max: 10,
        },
      },
    });

    console.log(opponents);
  }

  work();
  ```

{% endlist %}

#### उत्तरीय प्रारूप {#response-format}

```javascript
[
  {
    [id](*id): string;
    [meta](*meta): {
      meta1: number;
      meta2: number;
      meta3: number;
    };
    [player](*player): {
      avatar: string;
      name: string;
    };
    [timeline](*timeline): [
      {
        [id](*timeline_id): string;
        [payload](*payload): object | string | undefined;
        [time](*time): number;
      },
      ...
    ];
  },
  ...
]
```

#|
|| **पारामीटर** | **प्रकार** | **विवरण** ||
|| `id` | string | सत्र का पहचानकर्ता। ||
|| `meta` | object | कस्टम पैरामीटर `meta1`, `meta2`, `meta3`। उदाहरण के लिए, खेल में स्कोर या खिलाड़ी का स्तर। ||
|| `player` | object | प्रतिद्वंदी खिलाड़ी की जानकारी:
- `avatar: string` — उपयोगकर्ता के अवतार का URL;
- `name: string` — खिलाड़ी का नाम।
||
|| `timeline` | array | समयबद्ध घटनाओं का एक श्रृंखला, जो गेम सेशन को दर्शाती है:
- `id: string` — घटना का अनूठा पहचानकर्ता;
- `payload` — घटना का डेटा: जानकारी, जो गेम वर्ल्ड में बदलाव के मूल कारण या उद्देश्य को दर्शाती है (उदाहरण के लिए, पात्र के नए निर्देशांक या माउस क्लिक करना);
- `time: number` — खेल की शुरुआत से समय, विरामों को ध्यान में रखते हुए (मिलीसेकंड में)।
||
|#



## गेम सत्र रिकॉर्ड करना {#record}

{% note alert "प्रतिबंध" %}

एक सेसियां का अधिकतम आकार 200 किलोबाइट है।

{% endnote %}

उपयोगकर्ताओं के गेम सत्रों (टाइमस्टैंप के साथ इवेंट्स की अनुक्रम) को रिकॉर्ड करने के लिए SDK का उपयोग करें। इवेंट्स बोर्ड पर पहेलियों में मोहरों का स्थानांतरण या रनर्स में कीबोर्ड या माउस बटन का दबाना हो सकते हैं।

जहां उपयोगकर्ता का इनपुट निरंतर होता है, जैसे कि रनर्स में, इवेंट्स को एक निर्धारित समय अंतराल पर कृत्रिम रूप से बनाया जा सकता है, चरित्र की स्थिति की विशेषताओं को रिकॉर्ड करते हुए — जैसे कॉर्डिनेट्स, ऊर्जा स्तर आदि। यह गेम में यादृच्छिक इवेंट्स भी हो सकते हैं — पुरस्कार, भूकंप।

गेम में होने वाले इवेंट्स को ट्रांज़ैक्शन्स के रूप में सुरक्षित किया जाता है। प्रत्येक ट्रांज़ैक्शन में होते हैं:

- `id` — इवेंट का अद्वितीय पहचानकर्ता;
- `payload` — इवेंट डेटा: जानकारी जो खेल की दुनिया में परिवर्तनों के कारण को प्रकट करती है (जैसे, चरित्र के नए कॉर्डिनेट्स या माउस बटन को दबाना);
- `time` — खेल की शुरुआत से समय जिसमें विरामों का समायोजन होता है।

खेल के दौरान, `payload` को [commit()](#commit) मेथड की मदद से सुरक्षित करें। इससे एक ट्रांज़ैक्शन की सूची बन जाएगी — गेम सत्र की टाइमलाइन (`timeline`)।

खेल के अंत में, सत्र को सर्वर पर [push()](#push) मेथड की मदद से सुरक्षित करें। सुरक्षा के बाद सत्र को लोड और अगली खेल में चलाया जा सकता है।


### ysdk.multiplayer.sessions.commit() {#commit}

`commit()` विधि वर्तमान गेम सत्र में लेनदेन को स्थिर करती है। इसमें घटना डेटा ([payload](*payload)) पारित किया जाता है।

{% note warning "चेतावनी" %}

अन्य लेनदेन पैरामीटर — पहचानकर्ता (`id`) और गेम की शुरुआत के बाद का समय (`time`) — SDK में गणना की जाती है, इसलिए यह महत्वपूर्ण है कि `payload` समय पर भेजा जाए।

{% endnote %}

#### उपयोग का उदाहरण {#commit-ex}

```javascript
// पहला लेन-देन।
ysdk.multiplayer.sessions.commit({ x: 1, y: 2, z: 3, health: 67 });

// .......

// अगला लेन-देन।
ysdk.multiplayer.sessions.commit({ x: 4, y: -2, z: 19, health: 15 });

// .......
```


### ysdk.multiplayer.sessions.push() {#push}

विधि `push()` रिमोट सर्वर पर टाइमलाइन को सहेजने के लिए उपयोग की जाती है। इसका आह्वान खेल समाप्त होने पर किया जाता है।

`meta1`, `meta2`, `meta3` मान सत्र को सहेजते समय निर्धारित किए जाते हैं। कम से कम एक [meta-पैरामीटर](*meta) को परिभाषित किया जाना चाहिए।

#### उपयोग का उदाहरण {#push-ex}

```javascript
ysdk.multiplayer.sessions.push({ meta1: 12, meta2: -2 });
```



## सेशन्स के साथ काम करना {#use}

प्रतिद्वंदी के लोड किए गए सेशन्स के साथ काम करने का तरीका चुनने के लिए, मेथड [init()](#init) में फ्लैग `isEventBased` की सही मान्यता प्रदान करें:

- `true` — इवेंट्स के माध्यम से काम;
- `false` — स्वयं द्वारा प्रोसेसिंग।

{% list tabs %}

- इवेंट्स के माध्यम से

  क्लाइंट `ysdk.on()` के माध्यम से `multiplayer-sessions-transaction` और `multiplayer-sessions-finish` इवेंट्स पर सब्सक्राइब करता है, और SDK स्वयं सत्र लोड करता है और उसमें दी गई समय की मायनों पर इवेंट्स प्रदान करता है:

  - खेल के दौरान प्रतिद्वंदी की ट्रांजेक्शन्स `multiplayer-sessions-transaction` हैंडलर में शुरुआती समय से रिकॉर्ड किया जाता है, लेकिन प्रतिद्वंदी के टर्न के समय की सीमा (`maxOpponentTurnTime`, मेथड के पैरामीटर [init()](#init)) के साथ ध्यान में रखते हुए।

  - जब सत्र समाप्त होता है, तो हैंडलर `multiplayer-sessions-finish` उस प्रतिद्वंदी के आईडी के साथ बुलाया जाता है, जिसकी खेल समाप्त हो गई हो।

  ```javascript
  ysdk.multiplayer.sessions.init({
    count: 2, // लोड करने के लिए विपक्षी सत्रों की संख्या (10 तक)।
    isEventBased: true, // घटनाओं के माध्यम से कार्य आरंभ करने के लिए ध्वज।
    maxOpponentTurnTime: 200, // विपक्षी की चाल की समय सीमा (एमएस)।
    [meta](*meta): {
      meta1: {
        min: 0,
        max: 6000,
      },
      meta2: {
        min: 2,
        max: 10,
      },
    },
  });

  // यहाँ एक समय में निष्पादित किए जाने वाले लेनदेन का एक समूह आता है:
  // वर्तमान लेनदेन, साथ ही संभावित खेल के फ्रीज के कारण विलंबित लेनदेन।
  ysdk.on('multiplayer-sessions-transaction', ({ opponentId, transactions }) = > {
    console.log(opponentId, transactions);
    // खेल के मैदान पर transaction.payload के डेटा का अनुप्रयोग।
  });

  ysdk.on('multiplayer-sessions-finish', (opponentId) => console.log(opponentId));
  ```

  मल्टीप्लेयर का स्टार्ट और पॉज़ [गेमप्ले मार्कअप](sdk-game-events.md/#gameplay) के माध्यम से नियंत्रित होते हैं:

  ```javascript
  // मल्टीप्लेयर शुरू करें।
  ysdk.features.GameplayAPI.start();

  // मल्टीप्लेयर पॉज।
  ysdk.features.GameplayAPI.stop();
  ```

- अपना समाधान

  मल्टीप्लेयर आरंभ करने की विधि [init()](#init) विरोधियों के लोड किए गए सत्रों की एक सरणी लौटाती है, जिसमें लेन-देन के साथ टाइमलाइन शामिल होते हैं।

  डेटा प्राप्त करें और उन्हें स्वतः संसाधित करें:

  ```javascript
  const start = (opponent) => {
    console.log('player', opponent.player);
    console.log('timeline', opponent.timeline);

    // टाइमलाइन और प्लेयर डेटा के उपयोग की प्रणाली का कार्यान्वयन।
  }

  const work = async () => {
    const opponents = await ysdk.multiplayer.sessions.init({
      count: 2, // लोड करने के लिए विपक्षी सत्रों की संख्या (10 तक)।
      isEventBased: false, // घटनाओं के माध्यम से कार्य आरंभ करने के लिए ध्वज।
      maxOpponentTurnTime: 200, // विपक्षी की चाल की समय सीमा (एमएस)।
      [meta](*meta): {
        meta1: {
          min: 0,
          max: 6000,
        },
        meta2: {
          min: 2,
          max: 10,
        },
      },
    });

    console.log('opponents', opponents);

    for (let i = 0; i < opponents.length; i++) {
      start(opponents[i]);
    }
  }

  work();
  ```

{% endlist %}


---

<!-- source: hi/_includes/concepts/troubleshooting/id-troubleshooting/support.md -->
{% note info "नोट" %}

टीम सपोर्ट के कर्मचारी यंडेक्स गेम्स प्लेटफॉर्म पर तैयार खेल को डालने में मदद करते हैं। डेवलपमेंट और परीक्षण के संबंध में आवेदनिक प्रश्नों का उत्तर अन्य डेवलपर्स देंगे [Discord चैनल](https://discord.com/invite/wU4p3whr4T)।

{% endnote %}
<!-- endsource: hi/_includes/concepts/troubleshooting/id-troubleshooting/support.md -->

<!-- source: hi/_includes/button-fos.md -->
यदि आप किसी समस्या का सामना कर रहे हैं या Yandex Games SDK के इस्तेमाल के बारे में आपका कोई प्रश्न है, तो कृपया समर्थन से संपर्क करें:


<a href="https://yandex.com/chat/#/user/a4fa5c06-75db-9b38-6eea-b1673785f7d5">
  <span class="button">चैट करने के लिए लिखें</span>
</a>
<!-- endsource: hi/_includes/button-fos.md -->

[*id]: सत्र पहचानकर्ता।

[*meta]: सत्र को सहेजते समय निर्धारित किए गए उपयोगकर्ता-मूल्य पैरामीटर `meta1`, `meta2`, `meta3`, जैसे खेल में स्कोर या खिलाड़ी का स्तर।

[*player]: प्रतिद्वंदी खिलाड़ी की जानकारी:
- `avatar: string` — उपयोगकर्ता अवतार का URL;
- `name: string` — खिलाड़ी का नाम।

[*timeline]: गेमिंग सत्र का विवरण देने वाली घटनाओं की समयरेखा की सूची:
- `id: string` — अद्वितीय घटना पहचानकर्ता;
- `payload` — घटना डेटा: जानकारी जो बताती है कि कैसे और क्यों गेम वर्ल्ड में बदलाव आया (उदाहरण के लिए, चरित्र के नए निर्देशांक या माउस बटन का क्लिक);
- `time: number` — खेल की शुरुआत से समय, विराम का भी ध्यान रखा गया (मिलीसेकंड में)।

[*timeline_id]: घटना का अद्वितीय पहचानकर्ता।

[*payload]: घटना डेटा: जानकारी जो बताती है कि कैसे और क्यों गेम वर्ल्ड में बदलाव आया (उदाहरण के लिए, चरित्र के नए निर्देशांक या माउस बटन का क्लिक)।

[*time]: खेल की शुरुआत से समय, विराम को ध्यान में रखते हुए।