实现网络消息收发机制

function InternalSocket (url) {
    this.url = url;
    this._socket = null;
    this.handlers = {};
    this._heartBeatTimer = null;
    this._timeout = null;
    this._first = 1;
    this._retryTimes = 0;
    this._retry = 1;
};

InternalSocket.prototype.setRetry = function(isRetry){
    this._retry = isRetry;
};

InternalSocket.prototype.getRetry = function(){
    return this._retry;
};

InternalSocket.prototype.connect = function () {
    var self = this;
    cc.vv.log(self.url);
    self._socket = new WebSocket(self.url);
    self._socket.binaryType = "arraybuffer"; //blob
    self._socket.onopen = self.onopen.bind(this);
    self._socket.onmessage = self.onmessage.bind(this);
    self._socket.onerror = self.onerror.bind(this);
    self._socket.onclose = self.onclose.bind(this);
};

InternalSocket.prototype.onopen = function (event) {
    cc.vv.log("client connection establish.");
    var self = this;
    self.clearHBTimer();
    self.heartBeat();
    if (this._first) {
        this._first = 0;
        self._handle(cc.vv.SYS_MSG.CONNECT, {});
    }
    else {
        self._handle(cc.vv.SYS_MSG.RECONNECT, {});
    }
    this._retryTimes = 0;
};

InternalSocket.prototype.onmessage = function (event) {
    //cc.vv.log("recv data " + event.type);
    var self = this;
    var orig_buf = event.data;
    if (cc.sys.isNative) {
        self.onmessageNative(orig_buf);
    } 
    else {
        self.onmessageOther(orig_buf);
    }
};

InternalSocket.prototype.onerror = function (event) {
    var self = this;
    cc.vv.log("websocket error . State : " + self.readyState());
    cc.vv.log(JSON.stringify(event));
    //if (event.type == "error") {};
    self.clearHBTimer();
    if (!!self._socket)
        self._handle(cc.vv.SYS_MSG.ERROR, { readyState: self._socket.readyState });
};

InternalSocket.prototype.onclose = function (event) {
    var self = this;
    cc.vv.log("websocket close . State : " + self.readyState());
    cc.vv.log(JSON.stringify(event));
    self.clearHBTimer();
    self._handle(cc.vv.SYS_MSG.CLOSE, {});
    self._socket = null;

    if (self._retry && self._retryTimes < cc.vv.MAX_RECONNECT_TIMES) {
        self._retryTimes++;
        setTimeout(function ()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言可以使用网络实现不同主机之间的通信收发消息,其中TCP和多线程是实现这种通信的常用方法。 TCP是一种可靠的传输协议,它能提供保证数据可靠传输的机制。在C语言中,可以使用TCP套接字来实现网络通信。首先,需要在不同主机上建立TCP连接。其中,一个主机担任服务器的角色,监听某个端口,而另一个主机则作为客户端发起连接请求。使用C语言中的socket函数可以创建一个套接字,通过bind、listen和accept等函数可以完成服务器端的准备工作;而使用connect函数可以让客户端发起连接。一旦连接建立,两个主机就可以通过send和recv函数来发送和接收消息。 多线程可以在网络通信中发挥重要作用。在C语言中,可以使用线程库如pthread来创建和管理线程。通过多线程的方式,可以实现同时处理多个网络连接,提高通信效率。例如,可为每个连接创建一个独立的线程,在该线程中完成与对应客户端的消息收发工作。同时,线程之间可以共享数据,可以使用互斥量和条件变量等机制来确保多个线程安全地访问和处理网络数据。 总之,C语言可以使用TCP和多线程来实现不同主机之间的通信收发消息。TCP提供了可靠的连接,可以通过socket函数进行创建和监听;而多线程可以利用线程库如pthread来实现并行处理多个网络连接。这样,不同主机之间就可以方便地发送和接收消息实现高效的通信。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值