±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚwww.qcloud.co,ÕâƪÎÄÕ·ÖÏíÒ»¸ö¼òµ¥µÄ¼ôµ¶Ê¯Í·²¼µÄСÓÎÏ·µÄÖÆ×÷£¬Ï£ÍûÄܶÔÏëÒªÔÚС³ÌÐòÖÐʹÓÃ
WebSocket µÄ¿ª·¢ÕßÓаïÖú¡£ |
|
ûÊ´ò¿ªÐ¡³ÌÐò£¬ºÍ¸½½üµÄÈ˼ôµ¶Ê¯Í·²¼£¬ÏëÀ´¾ÍÀ´£¬Ïë×ß¾Í×ß¡£ËÄܳÉΪÎäÁÖ¸ßÊÖ£¿£¡
΢ÐÅС³ÌÐòÌṩÁËÒ»Ì×ÔÚ΢ÐÅÉÏÔËÐÐС³ÌÐòµÄ½â¾ö·½°¸£¬ÓбȽÏÍêÕûµÄ¿ò¼Ü¡¢×é¼þÒÔ¼° API£¬ÔÚÕâ¸öƽ̨ÉÏÃæµÄÏëÏó¿Õ¼äºÜ´ó¡£
ÌÚѶÔÆÄõ½ÁËС³ÌÐòÄÚ²â×ʸñ£¬Ñо¿ÁËÒ»·¬Ö®ºó£¬·¢ÏÖ΢ÐÅÖ§³Ö WebSocket »¹ÊǺÜÖµµÃÍæζµÄ¡£Õâ¸öÌØÐÔÒâζ×ÅÎÒÃÇ¿ÉÒÔ×öһЩʵʱͬ²½»òÕßÐ×÷µÄС³ÌÐò¡£
Õû¸öÓÎÏ··Ç³£¼òµ¥£¬Á¬½Óµ½·þÎñÆ÷ºó×Ô¶¯Æ¥ÅäÔÚÏßÍæ¼Ò£¨Ã»ÓÐÔò·ÖÅäÒ»¸ö»úÆ÷ÈË£©£¬È»ºóÁ½È˽øÐмôµ¶Ê¯Í·²¼µÄ¶Ô¿¹ÓÎÏ·¡£µ±¶Ô·½½øÐÐÈÍ·Ñ¡ÔñµÄʱºò£¬Í·Ïñ»áÐýת£¬Õâ¸ö¹ý³ÌʹÓÃ
WebSocket »á±äµÃ¼òµ¥¿ìËÙ¡£
²¿ÊðºÍÔËÐÐ
Äõ½Á˱¾Ð¡³ÌÐòÔ´ÂëµÄÅóÓÑ¿ÉÒÔ³¢ÊÔ×Ô¼ºÔËÐÐÆðÀ´¡£
ÕûÌå¼Ü¹¹
С³ÌÐòµÄ¼Ü¹¹·Ç³£¼òµ¥£¬ÕâÀïÓÐÁ½ÌõÍøÂçͬ²½£¬Ò»ÌõÊÇ HTTPS ͨ·£¬ÓÃÓÚ³£¹æÇëÇ󡣶ÔÓÚ WebSocket
ÇëÇ󣬻áÏÈ×ß HTTPS ºóÔÙÇл»ÐÒéµ½ WebSocket µÄ TCP Á¬½Ó£¬´Ó¶øʵÏÖÈ«Ë«¹¤Í¨ÐÅ¡£
1. ×¼±¸ÓòÃûºÍÖ¤Êé
ÔÚ΢ÐÅС³ÌÐòÖУ¬ËùÓеÄÍøÂçÇëÇóÊܵ½ÑϸñÏÞÖÆ£¬²»Âú×ãÌõ¼þµÄÓòÃûºÍÐÒéÎÞ·¨ÇëÇ󣬾ßÌå°üÀ¨£º
Ö»ÔÊÐíºÍÔÚ MP ÖÐÅäÖúõÄÓòÃû½øÐÐͨÐÅ£¬Èç¹û»¹Ã»ÓÐÓòÃû£¬ÐèҪע²áÒ»¸ö¡£
ÍøÂçÇëÇó±ØÐë×ß HTTPS ÐÒ飬ËùÒÔÄ㻹ÐèҪΪÄãµÄÓòÃûÉêÇëÒ»¸öÖ¤Êé¡£
ÓòÃû×¢²áºÃÖ®ºó£¬¿ÉÒԵǼ΢ÐŹ«ÖÚƽ̨ÅäÖÃͨÐÅÓòÃûÁË¡£
2. ÔÆÖ÷»úºÍ¾µÏñ²¿Êð
¼ôµ¶Ê¯Í·²¼µÄ·þÎñÆ÷ÔËÐдúÂëºÍÅäÖÃÒѾ´ò°ü³ÉÌÚѶÔÆ CVM ¾µÏñ£¬´ó¼Ò¿ÉÒÔÖ±½ÓʹÓá£
ÌÚѶÔÆÓû§¿ÉÒÔÃâ·ÑÁìÈ¡Àñ°ü£¬ÌåÑéÌÚѶÔÆС³ÌÐò½â¾ö·½°¸¡£
¾µÏñÒÑ°üº¬¡¸¼ôµ¶Ê¯Í·²¼¡¹ºÍ¡¸Ð¡Ïà²á¡¹Á½¸öС³ÌÐòµÄ·þÎñÆ÷»·¾³Óë´úÂ룬ÐèÒªÌåÑéÁ½¸öС³ÌÐòµÄÅóÓÑÎÞÐèÖظ´²¿Êð
3. ÅäÖÃ HTTPS
¾µÏñÖÐÒѾ²¿ÊðÁËnginx£¬ÐèÒªÔÚ/etc/nginx/conf.dÏÂÐÞ¸ÄÅäÖÃÖеÄÓòÃû¡¢Ö¤Ê顢˽Կ¡£
ÅäÖÃÍê³Éºó£¬¼´¿ÉÆô¶¯ nginx¡£
nginx
4. ÓòÃû½âÎö
ÎÒÃÇ»¹ÐèÒªÌí¼ÓÓòÃû¼Ç¼½âÎöµ½ÎÒÃǵÄÔÆ·þÎñÆ÷ÉÏ£¬ÕâÑù²Å¿ÉÒÔʹÓÃÓòÃû½øÐÐ HTTPS ·þÎñ¡£
ÔÚÌÚѶÔÆ×¢²áµÄÓòÃû£¬¿ÉÒÔÖ±½ÓʹÓÃÔƽâÎö¿ØÖÆ̨À´Ìí¼ÓÖ÷»ú¼Ç¼£¬Ö±½ÓÑ¡ÔñÉÏÃ湺ÂòµÄ CVM¡£
½âÎöÉúЧºó£¬ÎÒÃÇÔÚä¯ÀÀÆ÷ʹÓÃÓòÃû¾Í¿ÉÒÔ½øÐÐ HTTPS ·ÃÎÊ¡£
5. Æô¶¯ WebSocket ·þÎñ
ÔÚ¾µÏñµÄ nginx ÅäÖÃÖУ¨/etc/nginx/conf.d£©£¬ÒѾ°Ñ /applet/websocketµÄÇëÇóת·¢µ½http://127.0.0.1:9595
´¦Àí¡£ÎÒÃÇÐèÒª°Ñ Node ʵÏÖµÄ WebSocket ·þÎñÔÚÕâ¸ö¶Ë¿ÚÀïÔËÐÐÆðÀ´¡£
½øÈë¾µÏñÖÐÔ´ÂëλÖãº
cd /data/release/qcloud-applet-websocket
ʹÓÃpm2 Æô¶¯·þÎñ£º
pm2 start process.json
6. Æô¶¯Î¢ÐÅС³ÌÐò
ÔÚ΢ÐÅ¿ª·¢Õß¹¤¾ßÖÐÐÞ¸ÄС³ÌÐòÔ´ÂëÖÐµÄ config.js ÅäÖ㬰ÑͨѶÓòÃûÐ޸ijÉÉÏÃæÉêÇëµÄÓòÃû¡£Íê³Éºóµã»÷µ÷ÊÔ¼´¿ÉÁ¬½Óµ½
WebSocket ·þÎñ½øÐÐÓÎÏ·¡£
ÅäÖÃÍê³Éºó£¬ÔËÐÐС³ÌÐò¾Í¿ÉÒÔ¿´µ½³É¹¦´î½¨µÄÌáʾ£¡
ΪʲôҪÓà WebSocket
ʹÓô«Í³µÄ HTTP ÂÖѯ»òÕß³¤Á¬½ÓµÄ·½Ê½Ò²¿ÉÒÔʵÏÖÀàËÆ·þÎñÆ÷ÍÆË͵ÄЧ¹û£¬µ«ÊÇÕâÀ෽ʽ¶¼´æÔÚ×ÊÔ´ÏûºÄ¹ý´ó»òÍÆËÍÑÓ³ÙµÈÎÊÌâ¡£¶ø
WebSocket Ö±½ÓʹÓà TCP Á¬½Ó±£³ÖÈ«Ë«¹¤µÄ´«Ê䣬¿ÉÒÔÓÐЧµØ¼õÉÙÁ¬½ÓµÄ½¨Á¢£¬ÊµÏÖÕæÕýµÄ·þÎñÆ÷ͨÐÅ£¬¶ÔÓÚÓеÍÑÓ³ÙÓÐÒªÇóµÄÓ¦ÓÃÊÇÒ»¸öºÜºÃµÄÑ¡Ôñ¡£
Ä¿Ç°ä¯ÀÀÆ÷¶Ô WebSocket µÄÖ§³Ö³Ì¶ÈÒѾºÜºÃ£¬¼ÓÉÏ΢ÐÅС³ÌÐòµÄƽ̨֧³Ö£¬ÕâÖÖ¿ÉÒÔ¼«´óÌá¸ß¿Í»§¶ËÌåÑéµÄͨÐÅ·½Ê½½«»á±äµÃ¸ü¼ÓÖ÷Á÷¡£
Server ¶ËÐèҪʵÏÖ WebSocket ÐÒ飬²ÅÄÜÖ§³Ö΢ÐÅС³ÌÐòµÄ WebSocket ÇëÇó¡£¼øÓÚ
SocketIO ±»¹ã·ºÊ¹Ó㬼ôµ¶Ê¯Í·²¼µÄС³ÌÐò£¬ÎÒÃÇÑ¡ÓÃÁ˱ȽÏÖøÃûµÄ SocketIO ×÷Ϊ·þÎñ¶ËµÄʵÏÖ¡£
Socket IO µÄʹÓñȽϼòµ¥£¬½öÐ輸ÐдúÂë¾Í¿ÉÆô¶¯·þÎñ¡£
export class Server
{
init(path: string) {
/** Port that server listen on */
this.port = process.env.PORT;
/** HTTP Server instance for both express
and socket io */
this.http = http.createServer();
/** Socket io instance */
this.io = SocketIO(this.http, { path });
/** Handle incomming connection */
this.io.on("connection", socket =>
{
// handle connection
});
}
start() {
this.http.listen(this.port);
console.log(`---- server started. listen : ${this.port}
----`);
}
}
const server = new Server();
server.init("/applet/ws/socket.io");
server.start(); |
µ«ÊÇ£¬SocketIO ºÍһЩÆäËüµÄ·þÎñÆ÷¶ËʵÏÖ£¬¶¼ÓÐÆäÅäÌ׵Ŀͻ§¶ËÀ´Íê³ÉÉϲãÐÒéµÄ±àÂë½âÂë¡£µ«ÊÇÓÉÓÚ΢ÐŵÄÏÞÖÆ£¨²»ÄÜʹÓÃ
window µÈ¶ÔÏ󣩣¬ SocketIO µÄ¿Í»§¶Ë´úÂëÔÚ΢ÐÅС³ÌÐòƽ̨ÉÏÊÇÎÞ·¨ÔËÐеġ£
¾¹ý¶Ô SocketIO ͨÐŽøÐÐ×¥°üÒÔ¼°Ñо¿Æä¿Í»§¶ËÔ´Â룬±ÊÕß·â×°ÁËÒ»¸ö´óÔ¼ 100 ÐÐÊÊÓÃÓÚ΢ÐÅС³ÌÐòƽ̨µÄ
WxSocketIOÀ࣬¿ÉÒÔ°ïÖú¿ª·¢Õß¿ìËÙʹÓà SocketIO À´½øÐÐ WebSocket ͨÐÅ¡£
const socket
= new WxSocketIO();
socket.on('hi', packet => console.log('server
say hi: ' + packet.message));
socket.emit('hello', { from: 'techird' }); |
Èç¹ûÏëҪʹÓÃ΢ÐÅÔÉúµÄ API£¬ÄÇôÔÚ·þÎñÆ÷¶ËÒ²¿ÉÒÔÖ±½ÓʹÓà ws À´ÊµÏÖ W3C ±ê×¼µÄ½Ó¿Ú¡£²»¹ý
SocketIO Ö§³Ö¶à½ø³ÌµÄÌØÐÔ£¬¶ÔÓÚºóÐø×öºáÏòÀ©ÕÅÊǺÜÓаïÖúµÄ¡£ÌÚѶÔÆÔÚºóÃæÒ²»áÓмƻ®ÍƳöÖ§³Ö´ó¹æÄ£ÒµÎñÐèÇóµÄ
WebSocket Á¬½Ó·þÎñ£¬¼õСҵÎñµÄ²¿Êð³É±¾¡£
ͨÐÅÐÒéÉè¼Æ
ʵÏÖÒ»¸ö¶à¿Í»§¶Ë½»»¥µÄ·þÎñ£¬ÊÇÐèÒª°ÑÖмäÉæ¼°µ½ËùÓеÄÏûÏ¢ÀàÐͶ¼Éè¼ÆÇå³þµÄ£¬¾ÍÏñÊÇÀàËƼôµ¶Ê¯Í·²¼ÕâÑùÒ»¸öС³ÌÐò£¬¶¼ÓÐÏÂÃæÕâЩÏûÏ¢ÀàÐÍ¡£
¾ßÌåÿ¸öÏûÏ¢µÄ²ÎÊý¿ÉÒԲο¼Ô´ÂëÀïµÄserver/protocol.brief.md
·þÎñÆ÷Âß¼
·þÎñÆ÷µÄÂß¼ºÜ¼òµ¥£º
ÊÕµ½Óû§ÇëÇó¼ÓÈë·¿¼ä£¨join£©£¬¾ÍÑ°ÕÒ»¹Ã»ÂúµÄ·¿¼ä
ÕÒµ½·¿¼ä£¬Ôò¼ÓÈë
ûÕÒµ½·¿¼ä£¬´´½¨Ð·¿¼ä
ÓÐÓû§¼ÓÈëµÄ·¿¼ä¼ì²éÊÇ·ñÒÑÂú£¬Èç¹ûÒÑÂú£¬Ôò£º
¸ø·¿¼äÀïÿ¸öÓû§·¢ËÍ¿ªÊ¼ÓÎÏ·µÄÐźţ¨start£©
Æô¶¯¼ÆʱÆ÷£¬¼ÆʱÆ÷½áÊøºó½øÐÐÓÎÏ·½áËã
ÓÎÏ·½áËã
Á½Á½Ö®¼ä PK£¬Ó®·½·ÖÊý¼ÓÒ»£¬Êä·½¼õÒ»£¬×îÖÕµÃÿ¸öÍæ¼Ò»ù±¾µÃ·Ö x
¶ÔÓÚÿ¸öÍæ¼Ò£¬Èç¹û·ÖÊý x ´óÓÚ 0£¬ÔòÊÓΪʤÀû£¬Á¬Ê¤´ÎÊý¼ÓÒ»£¬·ñÔòÁ¬Ê¤´ÎÊý¹éÁã
±¾¾ÖµÃ·ÖΪ·ÖÊý x ³ËÒÔÁ¬Ê¤´ÎÊý
·¢Ëͱ¾¾ÖÓÎÏ·½á¹û¸ø·¿¼äÀïµÄÿλÍæ¼Ò
΢ÐŶËʵÏÖ
΢ÐÅС³ÌÐòÖ±½ÓʹÓÃÉÏÃæµÄÐÒ飬Õë¶Ô²»Í¬µÄ³¡¾°½øÐÐäÖȾ¡£ÕûÌåµÄ״̬»úÈçÏ¡£
״̬»úÕûÀíÇå³þºó£¬¾ÍÊǸù¾Ý״̬»úÀ´¿ØÖÆʲôʱºò·¢ËÍÏûÏ¢£¬½Óµ½ÏûÏ¢ºóÈçºÎ´¦ÀíµÄÎÊÌâÁË¡£¾ßÌåʵÏÖÇë²ÎÕÕ
app/pages/game/game.jsÀïµÄÔ´Âë¡£
|