Cocos2d-x 3.x如何通过WebSocket连接服务器进行数据传输

WebSocket

首先新建一个空的文件夹,通过npm安装nodejs-websocket:

1
npm install nodejs-websocket


新建app.js文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
var ws = require( "nodejs-websocket" );
ws.createServer(function(conn){
     conn.on( "text" , function (str) {
         console. log ( "get the message: " +str);
         conn.sendText( "the server got the message" );
     })
     conn.on( "close" , function (code, reason) {
         console. log ( "connection closed" );
     });
     conn.on( "error" , function (code, reason) {
         console. log ( "an error !" );
     });
}).listen(8001);


通过node app.js启动,这样服务器就搭建好了。


Cocos2d-x

首先在头文件中include头文件:

1
#include "network/WebSocket.h"


实现WebSocket的委托:

1
class  HelloWorld :  public  cocos2d::Layer, public  cocos2d::network::WebSocket::Delegate


四个委托中定义的函数接口以及一个用来连接的socketClient对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// for virtual function in websocket delegate
virtual  void  onOpen(cocos2d::network::WebSocket* ws);
virtual  void  onMessage(cocos2d::network::WebSocket* ws,  const  cocos2d::network::WebSocket::Data& data);
virtual  void  onClose(cocos2d::network::WebSocket* ws);
virtual  void  onError(cocos2d::network::WebSocket* ws,  const  cocos2d::network::WebSocket::ErrorCode& error);
 
// the websocket io client
cocos2d::network::WebSocket* _wsiClient;
初始化client:
_wsiClient =  new  cocos2d::network::WebSocket();
_wsiClient->init(* this "ws://localhost:8001" );
在cpp文件中实现这些函数:
// 开始socket连接
void  HelloWorld::onOpen(cocos2d::network::WebSocket* ws)
{
     CCLOG( "OnOpen" );
}
 
// 接收到了消息
void  HelloWorld::onMessage(cocos2d::network::WebSocket* ws,  const  cocos2d::network::WebSocket::Data& data)
{
         std::string textStr = data.bytes;
         textStr.c_str();
         CCLOG(textStr.c_str());
}
 
// 连接关闭
void  HelloWorld::onClose(cocos2d::network::WebSocket* ws)
{
     if  (ws == _wsiClient)
     {
         _wsiClient = NULL;
     }
     CC_SAFE_DELETE(ws);
     CCLOG( "onClose" );
}
 
// 遇到错误
void  HelloWorld::onError(cocos2d::network::WebSocket* ws,  const  cocos2d::network::WebSocket::ErrorCode& error)
{
     if  (ws == _wsiClient)
     {
         char  buf[100] = {0};
         sprintf (buf,  "an error was fired, code: %d" , error);
     }
     CCLOG( "Error was fired, error code: %d" , error);
}


还有一个使用SocketIO的方案(本文作者只提供了源码,但是尚未测试,您可以与作者一起测试,并可以提供反馈):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// Require HTTP module (to start server) and Socket.IO
var http = require( 'http' ), io = require( 'socket.io' );
 
// Start the server at port 8080
var server = http.createServer(function(req, res){ 
 
     // Send HTML headers and message
     res.writeHead(200,{  'Content-Type' 'text/html'  }); 
     res.end( '<h1>Hello Socket Lover!</h1>' );
});
server.listen(8080);
 
// Create a Socket.IO instance, passing it our server
var socket = io.listen(server);
 
// Add a connect listener
socket.on( 'connection' , function(client){ 
 
     // Create periodical which ends a message to the client every 5 seconds
     var interval = setInterval(function() {
         client.send( 'This is a message from the server!  '  new  Date().getTime());
     },5000);
 
     // Success!  Now listen to messages to be received
     client.on( 'message' ,function(event){ 
         console. log ( 'Received message from client!' ,event);
     });
     client.on( 'disconnect' ,function(){
         clearInterval(interval);
         console. log ( 'Server has disconnected' );
     });
 
});




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值