ਮਲਟੀਪਲੇਅਰ ਗੇਮਾਂ ਲਈ NestJS ਵਿੱਚ WebSocket ਚੁਣੌਤੀਆਂ ਨੂੰ ਸੰਬੋਧਿਤ ਕਰਨਾ
ਨਾਲ ਇੱਕ ਮਲਟੀਪਲੇਅਰ ਕਾਰਡ ਗੇਮ ਦਾ ਵਿਕਾਸ ਕਰਨਾ WebSockets ਅਤੇ NestJS ਬਹੁਤ ਸਾਰੇ ਮੁਸ਼ਕਲ ਕੰਮ ਪੇਸ਼ ਕਰਦਾ ਹੈ, ਖਾਸ ਤੌਰ 'ਤੇ ਗੇਮ ਉਦਾਹਰਨਾਂ ਲਈ ਗਤੀਸ਼ੀਲ ਨੇਮਸਪੇਸ ਦੇ ਪ੍ਰਬੰਧਨ ਦੇ ਸਬੰਧ ਵਿੱਚ। ਇਸ ਕਿਸਮ ਦੀਆਂ ਖੇਡਾਂ ਵਿੱਚ ਗੁਪਤਤਾ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਣ ਲਈ, ਖਿਡਾਰੀਆਂ ਨੂੰ ਡੇਟਾਬੇਸ ਤੋਂ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਨੂੰ ਦੂਰ ਰੱਖਣ ਅਤੇ ਦੂਜਿਆਂ ਨੂੰ ਉਨ੍ਹਾਂ ਦੇ ਕਾਰਡ ਦੇਖਣ ਤੋਂ ਰੋਕਣ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਡੇਟਾ ਦੀ ਉਲੰਘਣਾ ਦੀ ਸਥਿਤੀ ਵਿੱਚ ਵੀ, ਸਾਡੀ ਵਿਧੀ ਗੇਮ ਰਾਜਾਂ ਦੀ ਰੱਖਿਆ ਕਰਦੀ ਹੈ ਅਤੇ ਗੋਪਨੀਯਤਾ ਦੀ ਗਾਰੰਟੀ ਦਿੰਦੀ ਹੈ।
ਇੱਕ ਖੇਡ ਬਣਾਉਣ ਵਿੱਚ ਪਹਿਲਾ ਕਦਮ ਹੈ ਰੁਜ਼ਗਾਰ WebSocket ਖਿਡਾਰੀਆਂ ਨੂੰ ਖਾਸ ਗੇਮ ਸੈਸ਼ਨਾਂ ਨਾਲ ਲਿੰਕ ਕਰਨ ਲਈ ਕਨੈਕਸ਼ਨ। ਕਲਾਇੰਟ ਇੱਕ ਗਤੀਸ਼ੀਲ ਸਕੋਪ ਵਾਲੇ WebSocket ਨੇਮਸਪੇਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਜੁੜ ਸਕਦਾ ਹੈ, ਜਿਵੇਂ /game/:id, ਜਦੋਂ ਉਪਭੋਗਤਾ ਗੇਮ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਣ ਜਾਂ ਬਣਾਉਣ ਲਈ ਕਲਿਕ ਕਰਦਾ ਹੈ। ਸਰਵਰ ਇੱਕ ਗੇਮ ਆਬਜੈਕਟ ਨਾਲ ਜਵਾਬ ਦਿੰਦਾ ਹੈ। ਇਹ ਡਿਜ਼ਾਇਨ ਹਰੇਕ ਗੇਮ ਸੈਸ਼ਨ ਦੀ ਵਿਲੱਖਣਤਾ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਦਾ ਹੈ ਜਦੋਂ ਕਿ ਕਮਰਿਆਂ ਦੇ ਪ੍ਰਬੰਧਨ ਨਾਲ ਜੁੜੇ ਓਵਰਹੈੱਡ ਤੋਂ ਬਚਿਆ ਜਾਂਦਾ ਹੈ।
ਹਾਲਾਂਕਿ, ਇਹਨਾਂ ਗਤੀਸ਼ੀਲ ਤੌਰ 'ਤੇ ਸਕੋਪਡ ਨੇਮਸਪੇਸਾਂ ਦੇ ਅੰਦਰ ਘਟਨਾਵਾਂ ਨੂੰ ਛੱਡਣਾ ਇੱਕ ਚੁਣੌਤੀ ਪੇਸ਼ ਕਰਦਾ ਹੈ। this.server.of() ਵਿਧੀ ਇੱਕ ਫੰਕਸ਼ਨ ਨਾ ਹੋਣਾ ਇੱਕ ਸਮੱਸਿਆ ਹੈ ਜਿਸ ਨੂੰ ਡਿਵੈਲਪਰ ਪਾਰ ਕਰ ਸਕਦੇ ਹਨ, ਜੋ ਗੇਮ ਦੇ ਇਵੈਂਟ ਪ੍ਰਵਾਹ ਨੂੰ ਬੰਦ ਕਰ ਦਿੰਦਾ ਹੈ। ਇਹ ਖਾਸ ਤੌਰ 'ਤੇ ਮਹੱਤਵਪੂਰਨ ਹੋ ਜਾਂਦਾ ਹੈ ਜਦੋਂ ਮਹੱਤਵਪੂਰਨ ਤਬਦੀਲੀਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨਾ, ਜਿਵੇਂ ਕਿ ਗੇਮ ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਨੂੰ ਬੰਦ ਕਰਨਾ ਜਾਂ ਸਟੇਟ ਅੱਪਗਰੇਡ ਕਰਨਾ।
ਦੀ ਇੱਕ ਬਿਹਤਰ ਸਮਝ NestJS ਇਸ ਸਮੱਸਿਆ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਇਸ ਫਰੇਮਵਰਕ ਦੇ ਅੰਦਰ WebSocket ਗੇਟਵੇ ਅਤੇ ਨੇਮਸਪੇਸ ਓਪਰੇਸ਼ਨ ਜ਼ਰੂਰੀ ਹਨ। ਅਸੀਂ ਇਸ ਟਿਊਟੋਰਿਅਲ ਵਿੱਚ ਸਮੱਸਿਆ ਨੂੰ ਡੂੰਘਾਈ ਨਾਲ ਦੇਖਾਂਗੇ ਅਤੇ ਇਸ ਵਾਰ-ਵਾਰ ਸਮੱਸਿਆ ਦਾ ਇੱਕ ਭਰੋਸੇਮੰਦ ਹੱਲ ਪੇਸ਼ ਕਰਾਂਗੇ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦੇ ਹੋਏ ਕਿ ਤੁਹਾਡੀ ਗੇਮ ਫੰਕਸ਼ਨ ਵਿੱਚ WebSocket ਕਨੈਕਟੀਵਿਟੀ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਕਰਦੀ ਹੈ।
ਹੁਕਮ | ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਨ |
---|---|
@WebSocketGateway() | ਇੱਕ WebSocket ਗੇਟਵੇ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਕੇ, ਇਹ ਸਜਾਵਟ ਤੁਹਾਨੂੰ ਇਸ ਵਿੱਚ WebSocket ਸਰਵਰ ਬਣਾਉਣ ਦੇ ਯੋਗ ਬਣਾਉਂਦਾ ਹੈ NestJS. ਵੱਖਰੇ ਗੇਮ ਸੈਸ਼ਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ, 'ਨੇਮਸਪੇਸ' ਵਿਕਲਪ ਗਤੀਸ਼ੀਲ ਤੌਰ 'ਤੇ ਗੇਟਵੇ ਲਈ URL ਪੈਟਰਨ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ। |
@WebSocketServer() | ਦਾ ਟੀਕਾ ਲਗਾ ਕੇ ਗੇਟਵੇ ਤੋਂ ਸਿੱਧਾ ਇਵੈਂਟ ਐਮੀਸ਼ਨ ਅਤੇ ਸਾਕਟ ਪ੍ਰਬੰਧਨ ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਂਦਾ ਹੈ Socket.io ਕਲਾਸ ਵਿੱਚ ਸਰਵਰ ਆਬਜੈਕਟ. |
OnEvent() | ਇਹ ਸਜਾਵਟ ਕਰਨ ਵਾਲਾ ਐਪਲੀਕੇਸ਼ਨ ਦੇ ਦੂਜੇ ਖੇਤਰਾਂ ਤੋਂ ਸਿਗਨਲਾਂ ਨੂੰ ਦੇਖਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਗੇਮ ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਦੀ ਮਿਆਦ ਦੇ ਅੰਤ। ਰਾਜ ਦੇ ਬਦਲਾਅ ਬਾਰੇ ਵੱਖ-ਵੱਖ ਸੇਵਾਵਾਂ ਨੂੰ ਸੂਚਿਤ ਕਰਨ ਲਈ ਇਹ ਜ਼ਰੂਰੀ ਹੈ। |
client.join() | ਗੇਮ ਆਈਡੀ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ, ਕਲਾਇੰਟ ਨੂੰ ਇੱਕ ਖਾਸ WebSocket "ਰੂਮ" ਨਾਲ ਕਨੈਕਟ ਕਰਦਾ ਹੈ। ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਦਾ ਹੈ ਕਿ ਸਿਰਫ ਉਹ ਗਾਹਕ ਜੋ ਸੰਬੰਧਿਤ ਹਨ ਖਾਸ ਗੇਮਾਂ ਲਈ ਇਵੈਂਟਸ ਨੂੰ ਸਕੋਪ ਕਰਕੇ ਅਪਡੇਟ ਪ੍ਰਾਪਤ ਕਰਦੇ ਹਨ। |
client.leave() | ਕਿਸੇ ਕਲਾਇੰਟ ਨੂੰ WebSocket "ਰੂਮ" ਤੋਂ ਹਟਾ ਦਿੰਦਾ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਡਿਸਕਨੈਕਟ ਹੋਣ 'ਤੇ, ਉਹ ਹੁਣ ਗੇਮ-ਵਿਸ਼ੇਸ਼ ਇਵੈਂਟਾਂ ਦੇ ਅਧੀਨ ਨਹੀਂ ਹਨ। |
this.server.to() | ਇਵੈਂਟਸ ਨੂੰ ਇੱਕ ਮਨੋਨੀਤ ਕਮਰੇ ਵਿੱਚ ਪ੍ਰਸਾਰਿਤ ਕਰਦਾ ਹੈ। ਗੇਮ ਦੀ ਸਥਿਤੀ 'ਤੇ ਅੱਪਡੇਟ ਸਮੇਤ, ਸਾਰੇ ਜੁੜੇ ਗਾਹਕਾਂ ਨੂੰ ਗੇਮ-ਵਿਸ਼ੇਸ਼ ਇਵੈਂਟਾਂ ਨੂੰ ਭੇਜਣਾ ਮਹੱਤਵਪੂਰਨ ਹੈ। |
emit() | ਖਾਸ ਕਮਰਿਆਂ ਜਾਂ ਕਨੈਕਟ ਕੀਤੇ ਗਾਹਕਾਂ ਨੂੰ ਇਵੈਂਟਾਂ ਨੂੰ ਸੰਚਾਰਿਤ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। "ਪਲੇਅਰ ਐਕਸ਼ਨ" ਜਾਂ "ਗੇਮ ਸਟਾਰਟ" ਇਵੈਂਟਸ ਵਰਗੇ ਰੀਅਲ-ਟਾਈਮ ਅਪਡੇਟਾਂ ਦਾ ਪ੍ਰਸਾਰਣ ਕਰਨਾ ਮਹੱਤਵਪੂਰਨ ਹੈ ਅਤੇ ਇਸ ਤਕਨਾਲੋਜੀ ਦੀ ਲੋੜ ਹੈ। |
jest.spyOn() | ਯੂਨਿਟ ਟੈਸਟਿੰਗ ਲਈ ਇੱਕ ਟੈਸਟਿੰਗ ਵਿਧੀ ਜੋ ਖਾਸ ਕੋਡ ਭਾਗਾਂ ਨੂੰ ਧੋਖਾ ਦੇਣ ਲਈ ਵਰਤੀ ਜਾਂਦੀ ਹੈ। ਇੱਥੇ, ਇਹ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਕੰਮ ਕੀਤਾ ਗਿਆ ਹੈ ਕਿ, ਟੈਸਟ ਕਰਨ ਵੇਲੇ, ਗੇਮ ਗੇਟਵੇ ਵਿੱਚ ਇਵੈਂਟਾਂ ਨੂੰ ਸਫਲਤਾਪੂਰਵਕ ਛੱਡਿਆ ਜਾਂਦਾ ਹੈ। |
mockReturnValue() | ਇਹ ਤਕਨੀਕ, ਜੋ ਕਿ ਅਸਲ ਲਾਗੂ ਕਰਨ ਦੀ ਲੋੜ ਤੋਂ ਬਿਨਾਂ ਯੂਨਿਟ ਟੈਸਟਾਂ ਦੌਰਾਨ ਵਿਵਹਾਰ ਦੀ ਨਕਲ ਕਰਨ ਲਈ ਮਦਦਗਾਰ ਹੈ, ਟੈਸਟਿੰਗ ਦੌਰਾਨ ਇੱਕ ਖਾਸ ਨਤੀਜਾ ਵਾਪਸ ਕਰਨ ਲਈ ਇੱਕ ਮਖੌਲ ਕੀਤੇ ਫੰਕਸ਼ਨ ਨੂੰ ਸੈੱਟ ਕਰਦੀ ਹੈ। |
NestJS ਵਿੱਚ ਡਾਇਨਾਮਿਕ ਵੈਬਸਾਕੇਟ ਨੇਮਸਪੇਸ ਮੁੱਦਿਆਂ ਨੂੰ ਹੱਲ ਕਰਨਾ
ਸਕ੍ਰਿਪਟਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵੇਲੇ ਇੱਕ ਮਹੱਤਵਪੂਰਣ ਸਮੱਸਿਆ ਨਾਲ ਨਜਿੱਠਣ ਦੀ ਪੇਸ਼ਕਸ਼ ਕੀਤੀ ਗਈ ਹੈ WebSockets ਨਾਲ ਬਣਾਈ ਗਈ ਇੱਕ ਮਲਟੀਪਲੇਅਰ ਗੇਮ ਵਿੱਚ NestJS, ਜਿੱਥੇ ਨਾਮ-ਸਥਾਨਾਂ ਨੂੰ ਗਤੀਸ਼ੀਲ ਤੌਰ 'ਤੇ ਨਾਮ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ। ਮੁੱਦਾ ਖਾਸ ਤੌਰ 'ਤੇ ਹਰ ਗੇਮ ਲਈ ਗਤੀਸ਼ੀਲ ਤੌਰ 'ਤੇ ਤਿਆਰ ਕੀਤੇ ਗਏ ਨਾਮ-ਸਥਾਨ ਲਈ ਇਵੈਂਟਾਂ ਨੂੰ ਛੱਡਣ ਦਾ ਹੈ। ਪਹੁੰਚ ਵਿੱਚ ਸਕੋਪਡ ਇਵੈਂਟ ਐਮੀਸ਼ਨ ਅਤੇ ਡਾਇਨਾਮਿਕ ਨੇਮਸਪੇਸ ਪ੍ਰਬੰਧਨ ਦਾ ਸੁਮੇਲ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਇੱਕ ਰੈਗੂਲਰ ਸਮੀਕਰਨ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ, ਪਹਿਲੀ ਸਕ੍ਰਿਪਟ ਵਿੱਚ `@WebSocketGateway()} ਸਜਾਵਟ ਇੱਕ ਗਤੀਸ਼ੀਲ ਰੂਪ ਵਿੱਚ ਬਣਾਏ ਗਏ ਨਾਮ-ਸਪੇਸ ਨਾਲ WebSocket ਨੂੰ ਸੰਰਚਿਤ ਕਰਦਾ ਹੈ। ਇਹ ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ ਕਿ ਰਾਜ ਪ੍ਰਬੰਧਨ ਹਰੇਕ ਗੇਮ ਸੈਸ਼ਨ ਲਈ ਵੱਖ-ਵੱਖ ਨਾਮ-ਸਥਾਨਾਂ ਦੇ ਨਿਰਮਾਣ ਨੂੰ ਸਮਰੱਥ ਬਣਾ ਕੇ ਹਰੇਕ ਗੇਮ ਦੇ ਮੌਕੇ ਲਈ ਸਕੋਪ ਕੀਤਾ ਗਿਆ ਹੈ।
ਸਕ੍ਰਿਪਟ ਦੀ ਮੁੱਖ ਕਮਾਂਡ, `this.server.of()`, ਦਾ ਉਦੇਸ਼ ਮਨੋਨੀਤ ਗੇਮ ਨੇਮਸਪੇਸ ਵਿੱਚ ਇਵੈਂਟਾਂ ਨੂੰ ਛੱਡਣਾ ਹੈ। ਪਰ ਕਿਉਂਕਿ {of()} ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਲਾਗੂ ਕੀਤਾ ਗਿਆ ਹੈ Socket.io, ਇਹ ਕੋਈ ਫੰਕਸ਼ਨ ਨਹੀਂ ਹੈ ਜੋ ਸਿੱਧੇ ਤੌਰ 'ਤੇ ਉਪਲਬਧ ਹੈ NestJS, ਜਿਸ ਕਾਰਨ ਇਹ ਸਮੱਸਿਆ ਪੈਦਾ ਹੁੰਦੀ ਹੈ। ਇਸ ਦੀ ਬਜਾਏ, ਅਸੀਂ ਦੁਆਰਾ ਪੇਸ਼ ਕੀਤੇ ਗਏ `.to()} ਫੰਕਸ਼ਨ ਰਾਹੀਂ ਕਮਰਿਆਂ ਨੂੰ ਸੰਭਾਲਣਾ ਚਾਹੁੰਦੇ ਹਾਂ Socket.io, ਜੋ ਖਾਸ "ਕਮਰਿਆਂ" ਜਾਂ ਗੇਮ ਮੌਕਿਆਂ 'ਤੇ ਇਵੈਂਟਾਂ ਨੂੰ ਭੇਜਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ। ਇਹ ਰੀਵਰਕ ਦੂਜੀ ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਪੇਸ਼ ਕੀਤਾ ਗਿਆ ਹੈ, ਜਿੱਥੇ ਹਰੇਕ ਭਾਗੀਦਾਰ ਨੂੰ `client.join()` ਵਿਧੀ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਗੇਮ ਆਈਡੀ ਦੇ ਅਧਾਰ ਤੇ ਇੱਕ ਕਮਰੇ ਵਿੱਚ ਸ਼ਾਮਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਇਹ ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ ਕਿ ਗੇਮ-ਸਬੰਧਤ ਇਵੈਂਟ ਸਿਰਫ਼ ਉਸ ਖਾਸ ਗੇਮਿੰਗ ਰੂਮ ਵਿੱਚ ਖਿਡਾਰੀਆਂ ਨੂੰ ਭੇਜੇ ਜਾਂਦੇ ਹਨ।
ਪਲੇਅਰ ਕਨੈਕਸ਼ਨਾਂ ਅਤੇ ਡਿਸਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਦੂਜੀ ਤਕਨੀਕ ਵਿੱਚ `handleConnection()` ਅਤੇ `handleDisconnect()` ਵਿਧੀਆਂ ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਹ ਫੰਕਸ਼ਨ ਇਹ ਨਿਯੰਤਰਣ ਕਰਨ ਦੇ ਇੰਚਾਰਜ ਹੁੰਦੇ ਹਨ ਕਿ ਕਿਸੇ ਖਾਸ ਗੇਮ ਰੂਮ ਵਿੱਚ ਕਿਸ ਨੂੰ ਸ਼ਾਮਲ ਕੀਤਾ ਜਾਂ ਮਿਟਾਇਆ ਜਾਂਦਾ ਹੈ। ਇੱਕ ਖਿਡਾਰੀ ਦਾ ਸਾਕਟ ਇੱਕ ਕਮਰੇ ਨਾਲ ਜੁੜਿਆ ਹੁੰਦਾ ਹੈ ਜੋ ਗੇਮ ਆਈਡੀ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ ਜੋ ਉਹਨਾਂ ਦੇ ਸ਼ਾਮਲ ਹੋਣ 'ਤੇ ਨੇਮਸਪੇਸ ਤੋਂ ਲਿਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਹੱਲ ਗੇਮ ਸਟੇਟ ਨੂੰ ਅਲੱਗ ਕਰਕੇ ਅਤੇ ਸਿਰਫ਼ ਸੰਬੰਧਿਤ ਭਾਗੀਦਾਰਾਂ 'ਤੇ ਸੰਚਾਰ ਕੇਂਦਰਿਤ ਕਰਕੇ ਸਰਵਰ 'ਤੇ ਇੱਕੋ ਸਮੇਂ ਕਈ ਗੇਮਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਦੀ ਗੁੰਝਲਤਾ ਨੂੰ ਘਟਾਉਂਦਾ ਹੈ।
ਅੰਤਮ ਵਿਧੀ ਵਿੱਚ ਗਤੀਸ਼ੀਲ WebSocket ਇਵੈਂਟਸ ਦੇ ਸਹੀ ਪ੍ਰਬੰਧਨ ਦੀ ਗਰੰਟੀ ਦੇਣ ਲਈ ਯੂਨਿਟ ਟੈਸਟਿੰਗ ਸ਼ਾਮਲ ਹੈ। ਟੈਸਟ ਇਹ ਤਸਦੀਕ ਕਰ ਸਕਦਾ ਹੈ ਕਿ ਸਹੀ ਨੇਮਸਪੇਸ (ਗੇਮ ਰੂਮ) ਨੂੰ ਨਿਸ਼ਾਨਾ ਬਣਾਇਆ ਗਿਆ ਹੈ ਜਦੋਂ ਇਵੈਂਟ ਨਿਕਲਦੇ ਹਨ ਅਤੇ `jest.spyOn()` ਦੀ ਵਰਤੋਂ ਕਰਕੇ WebSocket ਇਵੈਂਟ ਐਮੀਟਰ ਦੇ ਵਿਵਹਾਰ ਦੀ ਨਕਲ ਕਰਦੇ ਹਨ। ਇਹ ਪੜਾਅ ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ ਕਿ ਗਤੀਸ਼ੀਲ WebSocket ਲਾਗੂ ਕਰਨਾ ਵੱਖ-ਵੱਖ ਗੇਮ ਸੈਸ਼ਨਾਂ ਅਤੇ ਹਾਲਾਤਾਂ ਵਿੱਚ ਅਨੁਮਾਨਿਤ ਤੌਰ 'ਤੇ ਕੰਮ ਕਰਦਾ ਹੈ। ਟੈਸਟਿੰਗ ਪ੍ਰਕਿਰਿਆਵਾਂ ਨੂੰ ਸ਼ਾਮਲ ਕਰਕੇ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਣਾ ਸੰਭਵ ਹੈ ਕਿ ਆਉਣ ਵਾਲੀਆਂ ਸੋਧਾਂ ਸੰਚਾਰ ਪ੍ਰਣਾਲੀ ਦੀਆਂ ਜ਼ਰੂਰੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਵਿੱਚ ਦਖਲ ਨਹੀਂ ਦੇਣਗੀਆਂ।
NestJS ਗੇਮ ਸੈੱਟਅੱਪ ਵਿੱਚ WebSocket ਨੇਮਸਪੇਸ ਸਮੱਸਿਆ ਨੂੰ ਠੀਕ ਕਰਨਾ
ਪਹੁੰਚ 1: ਵਰਤਣਾ Socket.io ਇੱਕ ਗਤੀਸ਼ੀਲ ਨੇਮਸਪੇਸ ਅਤੇ ਦੁਬਾਰਾ ਕੰਮ ਕਰਨ ਦੇ ਨਾਲ NestJS ਨੇਮਸਪੇਸ ਹੈਂਡਲਿੰਗ ਵਿਧੀ।
import { WebSocketGateway, WebSocketServer, OnGatewayInit, ConnectedSocket } from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';
import { OnEvent } from '@nestjs/event-emitter';
@WebSocketGateway({
namespace: /\/game\/[a-zA-Z0-9]+/,
cors: { origin: '*' },
})
export class GameGateway implements OnGatewayInit {
@WebSocketServer() server: Server;
afterInit() {
console.log('WebSocket Initialized');
}
@OnEvent('game.registration-closed')
handleGameReady(game: Game) {
const gameNamespace = `/game/${game._id}`;
const nsp = this.server.of(gameNamespace);
if (nsp) {
nsp.emit('pregame', game);
} else {
console.error('Namespace not found:', gameNamespace);
}
}
}
NestJS WebSockets ਵਿੱਚ ਸਹੀ ਡਾਇਨਾਮਿਕ ਨੇਮਸਪੇਸ ਬਾਈਡਿੰਗ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਰਿਫੈਕਟਰ
ਪਹੁੰਚ 2: ਬਿਲਟ-ਇਨ ਦੀ ਵਰਤੋਂ ਕਰਨਾ Socket.io ਕਮਰਾ ਪ੍ਰਬੰਧਨ ਸਾਧਨ, ਡਾਇਨਾਮਿਕ ਨੇਮਸਪੇਸ ਪਹੁੰਚ ਨੂੰ ਸੋਧੋ।
import { WebSocketGateway, WebSocketServer, OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect } from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';
import { OnEvent } from '@nestjs/event-emitter';
@WebSocketGateway({
cors: { origin: '*' },
})
export class GameGateway implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect {
@WebSocketServer() server: Server;
afterInit() {
console.log('WebSocket Initialized');
}
async handleConnection(client: Socket) {
const gameId = this.extractGameIdFromNamespace(client.nsp.name);
client.join(gameId);
}
async handleDisconnect(client: Socket) {
const gameId = this.extractGameIdFromNamespace(client.nsp.name);
client.leave(gameId);
}
@OnEvent('game.registration-closed')
handleGameReady(game: Game) {
this.server.to(game._id).emit('pregame', game);
}
private extractGameIdFromNamespace(nsp: string): string {
const match = nsp.match(/\/game\/([a-zA-Z0-9]+)/);
return match ? match[1] : '';
}
}
NestJS ਵਿੱਚ ਯੂਨਿਟ ਟੈਸਟਿੰਗ ਦੇ ਨਾਲ ਟੈਸਟ ਅਤੇ ਪ੍ਰਮਾਣਿਕਤਾ
ਢੰਗ 3: ਨੇਮਸਪੇਸ ਪ੍ਰਬੰਧਨ ਅਤੇ ਵੈਬਸੌਕੇਟ ਇਵੈਂਟਾਂ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਯੂਨਿਟ ਟੈਸਟ ਸ਼ਾਮਲ ਕਰੋ।
import { Test, TestingModule } from '@nestjs/testing';
import { GameGateway } from './game.gateway';
import { EventEmitterModule } from '@nestjs/event-emitter';
describe('GameGateway', () => {
let gateway: GameGateway;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [EventEmitterModule.forRoot()],
providers: [GameGateway],
}).compile();
gateway = module.get<GameGateway>(GameGateway);
});
it('should emit pregame event when registration closes', () => {
const game = { _id: 'game123', players: [] };
const emitSpy = jest.spyOn(gateway.server, 'to').mockReturnValue({ emit: jest.fn() } as any);
gateway.handleGameReady(game);
expect(emitSpy).toHaveBeenCalledWith('game123');
});
});
WebSocket ਗੇਮਾਂ ਵਿੱਚ ਡਾਇਨਾਮਿਕ ਨੇਮਸਪੇਸ ਪ੍ਰਬੰਧਨ ਨੂੰ ਸਮਝਣਾ
ਵਰਤਣ ਵੇਲੇ ਨੇਮਸਪੇਸ ਨੂੰ ਸੰਭਾਲਣਾ ਮਹੱਤਵਪੂਰਨ ਬਣ ਜਾਂਦਾ ਹੈ NestJS ਅਤੇ WebSockets ਇਹ ਗਾਰੰਟੀ ਦੇਣ ਲਈ ਮਲਟੀਪਲੇਅਰ ਗੇਮਾਂ ਬਣਾਉਣ ਲਈ ਕਿ ਇਵੈਂਟ ਐਮੀਸ਼ਨ ਅਤੇ ਗੇਮ ਸਟੇਟ ਮੈਨੇਜਮੈਂਟ ਖਾਸ ਗੇਮ ਸੈਸ਼ਨਾਂ ਤੱਕ ਸੀਮਿਤ ਹਨ। ਗਤੀਸ਼ੀਲ ਤੌਰ 'ਤੇ ਨੇਮਸਪੇਸ ਬਣਾਉਣਾ ਤਾਂ ਜੋ ਹਰੇਕ ਗੇਮ ਦੇ ਮੌਕੇ ਦਾ ਇੱਕ ਵੱਖਰਾ ਸੰਚਾਰ ਰੂਟ ਹੋਵੇ ਇੱਕ ਆਮ ਚੁਣੌਤੀ ਹੈ। ਇਸ ਡਿਵੀਜ਼ਨ ਦੇ ਕਾਰਨ ਖਿਡਾਰੀ ਸਿਰਫ਼ ਆਪਣੇ ਮੌਜੂਦਾ ਸੈਸ਼ਨ ਲਈ ਢੁਕਵੀਂ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰਦੇ ਹਨ, ਜੋ ਇਸ ਗੱਲ ਦੀ ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ ਕਿ ਇੱਕ ਗੇਮ ਵਿੱਚ ਕੀਤੀਆਂ ਗਈਆਂ ਗਤੀਵਿਧੀਆਂ ਦੂਜੀ ਗੇਮਾਂ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਨਹੀਂ ਕਰਦੀਆਂ। ਇੱਕ ਕਾਰਜਯੋਗ ਹੱਲ ਹੈ ਡਾਇਨਾਮਿਕ ਨੇਮਸਪੇਸ ਤਕਨੀਕ ਦੀ ਵਰਤੋਂ ਕਰਨਾ, ਜਿਸ ਵਿੱਚ ਹਰੇਕ ਗੇਮ ਦੇ ਵਿਲੱਖਣ ਵੈਬਸੌਕੇਟ ਨੇਮਸਪੇਸ ਨੂੰ URL ਦੁਆਰਾ ਪ੍ਰਸਤੁਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਜਿਵੇਂ ਕਿ /game/:id.
ਚਾਰ-ਖਿਡਾਰੀ ਕਾਰਡ ਗੇਮ ਲਈ ਜਿਵੇਂ ਕਿ ਜ਼ਿਕਰ ਕੀਤਾ ਗਿਆ ਹੈ, ਗੋਪਨੀਯਤਾ ਅਤੇ ਸੁਰੱਖਿਆ ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਹਨ। ਰੀਅਲ-ਟਾਈਮ ਸਟੇਟ ਅੱਪਡੇਟਾਂ ਨੂੰ ਨਿਯੰਤਰਿਤ ਕਰਨਾ ਮਹੱਤਵਪੂਰਨ ਹੈ ਜਦੋਂ ਕਿ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦੇ ਹੋਏ ਕਿ ਕੋਈ ਹੋਰ ਖਿਡਾਰੀ ਦਾ ਕਾਰਡ ਨਾ ਦੇਖ ਸਕੇ। ਗਤੀਸ਼ੀਲ ਤੌਰ 'ਤੇ ਨਾਮ ਦਿੱਤੇ ਗਏ WebSocket ਗੇਟਵੇ ਨਾਲ ਗੇਮ ਸੈਸ਼ਨਾਂ ਨੂੰ ਅਲੱਗ ਕਰਨਾ ਆਸਾਨ ਬਣਾਇਆ ਗਿਆ ਹੈ। ਬਦਕਿਸਮਤੀ ਨਾਲ, this.server.of() ਵਿਧੀ ਕਿਸੇ ਖਾਸ ਗੇਮ ਦੇ ਨਾਮ-ਸਪੇਸ ਵਿੱਚ ਇਵੈਂਟਾਂ ਨੂੰ ਛੱਡਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੰਦੀ, ਜਿਸ ਨਾਲ ਸਮੱਸਿਆਵਾਂ ਪੈਦਾ ਹੁੰਦੀਆਂ ਹਨ NestJS. ਵਿਕਲਪਕ ਤੌਰ 'ਤੇ, this.server.to(), ਦੁਆਰਾ ਪੇਸ਼ ਕੀਤੀ ਗਈ ਇੱਕ ਤਕਨੀਕ Socket.io ਜੋ ਕਿ ਸਕੋਪਡ ਇਵੈਂਟ ਨਿਕਾਸ ਨੂੰ ਕੁਸ਼ਲਤਾ ਨਾਲ ਪ੍ਰਬੰਧਿਤ ਕਰਦਾ ਹੈ, ਡਿਵੈਲਪਰਾਂ ਦੁਆਰਾ ਕਮਰਿਆਂ ਜਾਂ ਸਿੱਧੇ ਇਵੈਂਟ ਨਿਕਾਸ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਵਰਤਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ।
ਨਾਮ-ਸਥਾਨਾਂ ਨੂੰ ਉਚਿਤ ਢੰਗ ਨਾਲ ਪ੍ਰਬੰਧਿਤ ਕਰਨ ਤੋਂ ਇਲਾਵਾ, ਡਿਸਕਨੈਕਸ਼ਨਾਂ ਅਤੇ ਪੁਨਰ-ਕਨੈਕਸ਼ਨਾਂ ਵਰਗੇ ਕਿਨਾਰੇ ਹਾਲਾਤਾਂ ਨੂੰ ਸੰਬੋਧਿਤ ਕਰਨਾ ਅਤੇ ਗੇਮ ਸਟੇਟ ਪਰਿਵਰਤਨ ਦੇ ਦੌਰਾਨ ਉਚਿਤ ਇਵੈਂਟ ਪ੍ਰਵਾਹ ਦੀ ਗਰੰਟੀ ਦੇਣਾ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਘਟਨਾ ਸਰੋਤਿਆਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਸਥਾਪਤ ਕਰਕੇ ਅਤੇ ਵਰਤੋਂ ਕਰਕੇ NestJSਦੀ ਘਟਨਾ-ਸੰਚਾਲਿਤ ਆਰਕੀਟੈਕਚਰ, ਡਿਵੈਲਪਰ ਸਕੇਲੇਬਲ ਅਤੇ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਰੀਅਲ-ਟਾਈਮ ਪਲੇਅਰ-ਸਰਵਰ ਕਨੈਕਸ਼ਨ ਨੂੰ ਕਾਇਮ ਰੱਖ ਸਕਦੇ ਹਨ। ਯੂਨਿਟ ਟੈਸਟ ਇਹ ਯਕੀਨੀ ਬਣਾ ਕੇ ਭਵਿੱਖ ਦੇ ਅੱਪਡੇਟਾਂ ਅਤੇ ਸੁਧਾਰਾਂ ਲਈ ਇੱਕ ਠੋਸ ਆਧਾਰ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ ਕਿ ਇਹ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਕੰਮ ਕਰਨਾ ਜਾਰੀ ਰੱਖਦੀਆਂ ਹਨ ਕਿਉਂਕਿ ਗੇਮ ਵਧੇਰੇ ਗੁੰਝਲਦਾਰ ਬਣ ਜਾਂਦੀ ਹੈ।
ਮਲਟੀਪਲੇਅਰ ਗੇਮਾਂ ਵਿੱਚ WebSocket ਅਤੇ NestJS ਬਾਰੇ ਆਮ ਸਵਾਲ
- ਮੈਂ ਇੱਕ WebSocket ਵਿੱਚ ਗਤੀਸ਼ੀਲ ਰੂਪ ਵਿੱਚ ਨੇਮਸਪੇਸ ਕਿਵੇਂ ਬਣਾਵਾਂ?
- ਤੁਸੀਂ ਇੱਕ ਨਾਲ WebSocket ਨੂੰ ਅਨੁਕੂਲਿਤ ਕਰਨ ਲਈ ਨਿਯਮਤ ਸਮੀਕਰਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ namespace ਵਿੱਚ ਜਾਇਦਾਦ @WebSocketGateway ਗਤੀਸ਼ੀਲ ਤੌਰ 'ਤੇ ਨੇਮਸਪੇਸ ਬਣਾਉਣ ਲਈ ਸਜਾਵਟ ਕਰਨ ਵਾਲਾ। ਇਹ ਇੱਕ ਗੇਮ ਲਈ ਖਾਸ ਨੇਮਸਪੇਸ ਲਚਕਦਾਰ ਬਣਾਉਂਦਾ ਹੈ।
- ਵਰਤਣ ਦਾ ਬਦਲ ਕੀ ਹੈ this.server.of() NestJS ਵਿੱਚ?
- ਤੁਸੀਂ ਵਰਤ ਸਕਦੇ ਹੋ this.server.to() ਇਵੈਂਟ ਨਿਕਾਸ ਲਈ ਖਾਸ ਕਮਰਿਆਂ ਜਾਂ ਨਾਮ-ਸਥਾਨਾਂ ਨੂੰ ਨਿਸ਼ਾਨਾ ਬਣਾਉਣ ਲਈ, ਜਿਵੇਂ ਕਿ this.server.of() ਵਿੱਚ ਇੱਕ ਫੰਕਸ਼ਨ ਨਹੀਂ ਹੈ NestJS.
- ਮੈਂ WebSocket ਗੇਮਾਂ ਵਿੱਚ ਪਲੇਅਰ ਡਿਸਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਾਂ?
- ਦ handleDisconnect ਤਕਨੀਕ ਦੀ ਵਰਤੋਂ ਪਲੇਅਰ ਡਿਸਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ; ਇਹ ਤੁਹਾਨੂੰ ਖਿਡਾਰੀ ਨੂੰ ਗੇਮ ਰੂਮ ਤੋਂ ਬਾਹਰ ਲੈ ਜਾਣ ਅਤੇ ਕਿਸੇ ਵੀ ਲੋੜੀਂਦੀ ਸਫਾਈ ਦਾ ਧਿਆਨ ਰੱਖਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ।
- ਮੈਂ NestJS ਵਿੱਚ WebSocket ਕਾਰਜਸ਼ੀਲਤਾ ਦੀ ਜਾਂਚ ਕਿਵੇਂ ਕਰ ਸਕਦਾ ਹਾਂ?
- jest.spyOn() ਦੀ ਵਰਤੋਂ ਇਵੈਂਟ ਨਿਕਾਸ ਦੀ ਨਕਲ ਕਰਨ ਅਤੇ ਤਸਦੀਕ ਕਰਨ ਲਈ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ ਕਿ ਜਦੋਂ ਗੇਮ ਸਥਿਤੀ ਬਦਲਦੀ ਹੈ ਤਾਂ ਸਹੀ ਇਵੈਂਟਾਂ ਨਿਕਲਦੀਆਂ ਹਨ।
- ਇੱਕ WebSocket ਗੇਮ ਵਿੱਚ ਕਮਰਿਆਂ ਦਾ ਉਦੇਸ਼ ਕੀ ਹੈ?
- ਖਿਡਾਰੀਆਂ ਨੂੰ ਵੱਖ-ਵੱਖ ਗੇਮ ਸੈਸ਼ਨਾਂ ਵਿੱਚ ਵੰਡ ਕੇ, ਕਮਰੇ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਵਿੱਚ ਸਹਾਇਤਾ ਕਰਦੇ ਹਨ ਕਿ ਇਵੈਂਟਾਂ ਨੂੰ ਢੁਕਵੇਂ ਖਿਡਾਰੀ ਸਮੂਹ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਸਕੋਪ ਕੀਤਾ ਗਿਆ ਹੈ। client.join() ਅਤੇ client.leave() ਤਕਨੀਕਾਂ
NestJS ਮਲਟੀਪਲੇਅਰ ਗੇਮਾਂ ਵਿੱਚ WebSocket 'ਤੇ ਅੰਤਿਮ ਵਿਚਾਰ
ਵਿੱਚ ਗਤੀਸ਼ੀਲ ਨਾਮ-ਸਥਾਨਾਂ ਨੂੰ ਸੰਭਾਲਣਾ ਮੁਸ਼ਕਲ ਹੋ ਸਕਦਾ ਹੈ WebSocket NestJS ਨਾਲ ਗੇਮਾਂ, ਖਾਸ ਤੌਰ 'ਤੇ ਜਦੋਂ ਹਰੇਕ ਗੇਮ ਦੀ ਉਦਾਹਰਨ ਲਈ ਇਸਦੇ ਆਪਣੇ ਸਕੋਪਡ ਸੰਚਾਰ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਅਲੱਗ-ਥਲੱਗ ਗੇਮ ਸੈਸ਼ਨਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਇੱਕ ਹੋਰ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਤਕਨੀਕ ਹੈ ਕਮਰੇ ਦੀ ਵਰਤੋਂ ਕਰਨਾ Socket.io, ਜੋ NestJS ਵਿੱਚ "this.server.of()" ਦੀ ਪਰਿਭਾਸ਼ਿਤ ਨਾ ਹੋਣ ਦੀ ਸਮੱਸਿਆ ਨੂੰ ਹੱਲ ਕਰਦਾ ਹੈ।
ਤੁਸੀਂ ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰ ਸਕਦੇ ਹੋ ਕਿ ਤੁਹਾਡੀ ਮਲਟੀਪਲੇਅਰ ਗੇਮ ਇਹਨਾਂ ਸਭ ਤੋਂ ਵਧੀਆ ਅਭਿਆਸਾਂ ਨੂੰ ਲਾਗੂ ਕਰਕੇ ਸੁਰੱਖਿਅਤ ਅਤੇ ਸਕੇਲੇਬਲ ਹੈ, ਜਿਸ ਵਿੱਚ ਇਵੈਂਟ ਪ੍ਰਵਾਹ ਦਾ ਮੁਲਾਂਕਣ ਕਰਨਾ ਅਤੇ ਗੇਮ ਸਟੇਟਸ ਨੂੰ ਕਮਰਿਆਂ ਵਿੱਚ ਵੰਡਣਾ ਸ਼ਾਮਲ ਹੈ। ਇਹ ਸੋਧਾਂ ਖਿਡਾਰੀਆਂ ਅਤੇ ਉਹਨਾਂ ਦੇ ਗੇਮ ਡੇਟਾ ਦੇ ਪ੍ਰਬੰਧਨ ਦੀ ਇੱਕ ਸੰਗਠਿਤ ਵਿਧੀ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰਕੇ ਗੁੰਝਲਦਾਰ ਹੱਲ ਦੀ ਜ਼ਰੂਰਤ ਨੂੰ ਖਤਮ ਕਰਦੀਆਂ ਹਨ।
ਸੰਬੰਧਿਤ ਸਰੋਤ ਅਤੇ ਹਵਾਲੇ
- ਵਿੱਚ WebSocket ਲਾਗੂ ਕਰਨ ਦੇ ਵੇਰਵੇ NestJS ਅਧਿਕਾਰਤ NestJS ਦਸਤਾਵੇਜ਼ਾਂ ਵਿੱਚ ਪਾਇਆ ਜਾ ਸਕਦਾ ਹੈ: NestJS WebSockets .
- ਵਰਤਦੇ ਹੋਏ ਡਾਇਨਾਮਿਕ ਨੇਮਸਪੇਸ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਦਾ ਮੁੱਦਾ Socket.io Socket.io ਦਸਤਾਵੇਜ਼ਾਂ ਤੋਂ ਹਵਾਲਾ ਦਿੱਤਾ ਗਿਆ ਸੀ: Socket.io ਕਮਰੇ .
- WebSockets ਨਾਲ ਸਕੇਲੇਬਲ ਰੀਅਲ-ਟਾਈਮ ਮਲਟੀਪਲੇਅਰ ਗੇਮਾਂ ਬਣਾਉਣ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਅਭਿਆਸਾਂ ਨੂੰ ਇਸ ਸਰੋਤ ਤੋਂ ਇਕੱਠਾ ਕੀਤਾ ਗਿਆ ਸੀ: MDN WebSockets API .
- WebSockets ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਟੈਸਟਿੰਗ ਵਿਧੀ ਮਜ਼ਾਕ ਜੈਸਟ ਦੇ ਅਧਿਕਾਰਤ ਦਸਤਾਵੇਜ਼ਾਂ ਤੋਂ ਪ੍ਰਾਪਤ ਕੀਤਾ ਗਿਆ ਸੀ: ਜੈਸਟ ਮੌਕ ਫੰਕਸ਼ਨ .