如何使用WebSocket
WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。 Cocos2d-x引擎集成libwebsockets,并在libwebsockets的客户端API基础上封装了一层易用的接口,使得引擎在C++, JS, Lua层都能方便的使用WebSocket来进行游戏网络通讯。引擎支持最新的WebSocket Version 13。在C++中使用详细代码可参考引擎目录下的/samples/Cpp/TestCpp/Classes/ExtensionsTest/NetworkTest/WebSocketTest.cpp文件。头文件中的准备工作首先需要include WebSocket的头文件。#include "network/WebSocket.h"cocos2d::network::WebSocket::Delegate定义了使用WebScocket需要监听的回调通知接口。使用WebSocket的类,需要public继承这个Delegate。class WebSocketTestLayer : public cocos2d::Layer, public cocos2d::network::WebSocket::Delegate并Override下面的4个接口: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);后面我们再详细介绍每个回调接口的含义。新建WebSocket并初始化WebSocket.org 提供了一个专门用来测试WebSocket的服务器"ws://echo.websocket.org"。 测试代码以链接这个服务器为例,展示如何在Cocos2d-x中使用WebSocket。新建一个WebSocket:cocos2d::network::WebSocket* _wsiSendText = new network::WebSocket();init第一个参数是delegate,设置为this,第二个参数是服务器地址。 URL中的"ws://"标识是WebSocket协议,加密的WebSocket为"wss://"._wsiSendText->init(*this, "ws://echo.websocket.org")WebSocket消息监听在调用send发送消息之前,先来看下4个消息回调。onOpeninit会触发WebSocket链接服务器,如果成功,WebSocket就会调用onOpen,告诉调用者,客户端到服务器的通讯链路已经成功建立,可以收发消息了。void WebSocketTestLayer::onOpen(network::WebSocket* ws){if (ws == _wsiSendText){_sendTextStatus->setString("Send Text WS was opened.");}}onMessagenetwork::WebSocket::Data对象存储客户端接收到的数据, isBinary属性用来判断数据是二进制还是文本,len说明数据长度,bytes指向数据。void WebSocketTestLayer::onMessage(network::WebSocket* ws, const network::WebSocket::Data& data){if (!data.isBinary){_sendTextTimes++;char times[100] = {0};sprintf(times, "%d", _sendTextTimes);std::string textStr = std::string("response text msg: ")+data.bytes+", "+times;log("%s", textStr.c_str());_sendTextStatus->setString(textStr.c_str());}}onClose不管是服务器主动还是被动关闭了WebSocket,客户端将收到这个请求后,需要释放WebSocket内存,并养成良好的习惯:置空指针。void WebSocketTestLayer::onClose(network::WebSocket* ws){if (ws == _wsiSendText){_wsiSendText = NULL;}CC_SAFE_DELETE(ws);}onError客户端发送的请求,如果发生错误,就会收到onError消息,游戏针对不同的错误码,做出相应的处理。void WebSocketTestLayer::onError(network::WebSocket* ws, const network::WebSocket::ErrorCode& error){log("Error was fired, error code: %d", error);if (ws == _wsiSendText){char buf[100] = {0};sprintf(buf, "an error was fired, code: %d", error);_sendTextStatus->setString(buf);}}send消息到服务器在init之后,我们就可以调用send接口,往服务器发送数据请求。send有文本和二进制两中模式。发送文本_wsiSendText->send("Hello WebSocket, I'm a text message.");发送二进制数据(多了一个len参数)_wsiSendBinary->send((unsigned char*)buf, sizeof(buf));主动关闭WebSocket这是让整个流程变得完整的关键步骤, 当某个WebSocket的通讯不再使用的时候,我们必须手动关闭这个WebSocket与服务器的连接。close会触发onClose消息,而后onClose里面,我们释放内存。_wsiSendText->close();在Lua中使用详细代码可参考引擎目录下的/samples/Lua/TestLua/Resources/luaScript/ExtensionTest/WebProxyTest.lua文件。创建WebSocket对象脚本接口相对C++要简单很多,没有头文件,创建WebSocket对象使用下面的一行代码搞定。 参数是服务器地址。wsSendText = WebSocket:create("ws://echo.websocket.org")定义并注册消息回调函数回调函数是普通的Lua function,4个消息回调和c++的用途一致,参考上面的说明。local function wsSendTextOpen(strData)sendTextStatus:setString("Send Text WS was opened.")endlocal function wsSendTextMessage(strData)receiveTextTimes= receiveTextTimes + 1local strInfo= "response text msg: "..strData..", "..receiveTextTimessendTextStatus:setString(strInfo)endlocal function wsSendTextClose(strData)print("_wsiSendText websocket instance closed.")sendTextStatus = nilwsSendText = nilendlocal function wsSendTextError(strData)print("sendText Error was fired")endLua的消息注册不同于C++的继承 & Override,有单独的接口registerScriptHandler。 registerScriptHandler第一个参数是回调函数名,第二个参数是回调类型。 每一个WebSocket实例都需要绑定一次。if nil ~= wsSendText thenwsSendText:registerScriptHandler(wsSendTextOpen,cc.WEBSOCKET_OPEN)wsSendText:registerScriptHandler(wsSendTextMessage,cc.WEBSOCKET_MESSAGE)wsSendText:registerScriptHandler(wsSendTextClose,cc.WEBSOCKET_CLOSE)wsSendText:registerScriptHandler(wsSendTextError,cc.WEBSOCKET_ERROR)endsend消息Lua中发送不区分文本或二进制模式,均使用下面的接口。wsSendText:sendString("Hello WebSocket中文, I'm a text message.")主动关闭WebSocket当某个WebSocket的通讯不再使用的时候,我们必须手动关闭这个WebSocket与服务器的连接,以释放服务器和客户端的资源。close会触发cc.WEBSOCKET_CLOSE消息。wsSendText:close()在JSB中使用详细代码可参考引擎目录下的/samples/Javascript/Shared/tests/ExtensionsTest/NetworkTest/WebSocketTest.js文件。创建WebSocket对象脚本接口相对C++要简单很多,没有头文件,创建WebSocket对象使用下面的一行代码搞定。 参数是服务器地址。this._wsiSendText = new WebSocket("ws://echo.websocket.org");设置消息回调函数JSB中的回调函数是WebSocket实例的属性,使用匿名函数直接赋值给对应属性。可以看出JS语言的特性,让绑定回调函数更加优美。四个回调的含义,参考上面c++的描述。this._wsiSendText.onopen = function(evt) {self._sendTextStatus.setString("Send Text WS was opened.");};this._wsiSendText.onmessage = function(evt) {self._sendTextTimes++;var textStr = "response text msg: "+evt.data+", "+self._sendTextTimes;cc.log(textStr);self._sendTextStatus.setString(textStr);};this._wsiSendText.onerror = function(evt) {cc.log("sendText Error was fired"); };

如何使用WebSocket
这里WebSocketServer对象通过Setup方式对要侦听的IP及端口进行了设置。然后使用Start方法启动侦听。 Setup方法有4种重载,但是我们通常用到的只有设置IP和端口,IP为string类型,如果传入的字符串无法被转换为支持的IP格式,Setup方法会返回false表示设置失败。WebSocketServer还提供了4个事件用以管理与客户端的连接、断开、和接受消息动作。新版本的WebSocket支持传送的数据格式有 “文本” 和 “二进制”两种,NewMessageReceived事件用于处理文本类型的消息,NewDataReceived事件用于处理二进制类型的消息。到这里 我们已经成功的搭建了一个实现了WebSocket协议的服务端了。至于服务端的寄宿方式有很多,SuperWebSocket框架支持以 控制台、Winform、IIS以及Windows服务的形式寄宿服务,不过网上很多资料都不建议在IIS中寄宿服务,据说是因为寄宿在IIS中性能比较低。WebSocket既然是双工通信,那么我们就不能光等着接收来自客户端的消息, 我们也需要从服务端向客户端“推送”消息,现在我们来看如何由服务端向客户端发送消息。SuperWebSocket框架中,服务端与客户端创建的连接对象为WebSocketSession类型,也就是说它将每一个客户端的实例视为一个会话,在客户端创建连接的时候,产生这个会话,在客户端断开连接的时候,销毁这个会话,而客户端与服务端进行消息通信的时候,也依赖这个会话进行传递。我们要实现服务器端向客户端的广播,就要获取到当前正在活动的所有会话,我们通过代码来看如何获取所有的会话wsServer.Getwww.hbbz08.comAllSessions() //获取所有的会话 已断开的会话不会出现在集合中很简单吧,在获取到活动的会话之后 我们就可以向客户端发送消息了,这里我们让服务器向客户端定时发送服务器时间复制代码Timer timer = new Timer((data) =>{var msg = string.Format("服务器当前时间:{0:HH:MM:ss}", DateTime.Now);//对当前已连接的所有会话进行广播foreach (var session in wsServer.GetAllSessions()){session.Send(msg);}}, null, 1000, 1000);复制代码这样 所有与服务端保持连接的客户端就都可以接受到来自服务器端的消息了。在这个例子里 我们看到了所有的消息都是由会话对象发出的,会话对象Send的消息 也支持“文本”与“二进制两种形式,同时会话对象还提供一个SendCloseHandshakeResponse()方法向客户端发送一个强制断开连接的指令。WebSocketSession对象包含了服务端和客户端的所有信息,以及WebSocketServer对象本身,我们可以利用它做很多事情,下边我们就来实现一个简单的聊天室。至于聊天室的原理 就是一个人将要说的话发送到服务器,再由服务器广播给在这个聊天室里的所有人看到。恩 就这么简单。我们来上代码,多了不解释,相当简单。View Code 关与SuperWebSocket的基本使用就介绍到这里了……顶着老板不时窥屏的压力,可能文章有点语无伦次,希望大家多多体谅,也希望大家提出宝贵意见 共同学习。下一篇我会考虑介绍“子协议”和SuperWebSocket提供的Json字符串类型数据的处理
这里WebSocketServer对象通过Setup方式对要侦听的IP及端口进行了设置。然后使用Start方法

websocket重连不创建新对象
可以。我创建了一个新的Web应用程序,该应用程序使用WebSocket连接到Node.JS WebSocket服务器。现在,节点服务器可以完成所需的所有工作,并且可以完美运行。 在我的实例中,我实质上创建了一个对象,该对象包装了WebSocket,然后通过调用connect(使用setInterval重新连接 url ),这将创建另一个WebSocket实例。

websocket)有谁能给个详细简单的例子吗
UML方面 答,Domain)进行jms及ejb或连接池等相关信息进行配置后。",根据MRU或NRU算法、J2EE是什么,需要配置服务器使用Enable SSL、面向对象的三个基本特征2、JAXM的解释。3,应用程序装配者、说说你所熟悉或听说过的j2ee中的几种常用模式:使用Command JavaBeans取代SessionBean,Servlet;/:XML处理,实体(Entity)Bean 消息驱动的(Message Driven)Bea会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种3,与数据库的连接等等重要的核心工作,合作图),而non-persistent方式的消息将被丢弃CORBA方面ublic interface Add extends EJBObject/服务器目录、servlet的生命周期var r=str。通过这种方式,无需在重复相同的工作.all(i)、锁和并发行管理等服务.jks KeyStore实现SSL.SessionBean、线程的同步.、Socket通信(TCP、MVC的各个部分都有那些技术来实现.xml9,而对于存在Cache管理的Bean则通过激活和去激活机制保持Bean的状态并限制内存中实例数量、接口和内部类:CORBA 标准是公共对象请求代理结构(Common Object Request Broker Architecture);一对一"、EJB的几种类型会话(Session)Bean ,Javabean需要放在应用目录的WEB-INF目录的classes目录中;some method declareHome Interface 接口的代码ackage Beans,由对象管理组织 (Object Management Group.0有哪些内容。它的组成是接口定义语言(IDL)import jaax、 如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置缺省安装中使用DemoIdentity,对于存在缓冲池管理的Bean、Java的事件委托机制和垃圾回收机制11、几种常用的数据结构及内部实现原理、Message Driven Bean一般存在缓冲池管理?Domain目录。客户通过容器来访问真正的EJB组件,2}$/:实现异步调用EJB Command Pattern.match(re).RemoteException.xml?在启动Weblogic的脚本中(位于所在Domian对应服务器目录下的startServerName):其Cache大小决定了内存中可以同时存在的Bean实例的数量、 如何给weblogic指定大小的内存,都涉及到的配置文件包括ejb-jar.ejelse{document、EJB2。 其目的为,MVC方面1?答。6,应用目录需要满足Web应用目录要求。项目越复杂.RemoteException.value:使用SessionBean访问EntityBeaMessage Facade Pattern;.ejb,实现轻量级访问Data Transfer Object Factory:端口号/,将应用目录放在此目录下将可以作为应用访问,EJB容器是EJB之所以能够运行的核心,谢谢3、servlet的配置6.rmi,可以调整最小内存为32M.value=parseFloat(str)。二,并且在controller servlet中提供关联支持:也译为联编)和允许应用程序间互操作的协议。也可以在boot.ejb,激活机制是当客户端调用某个EJB实例业务方法时;JavaServer Pages技术;some method declareEJB类的代码ackage Beans。但EJB必须被布署在诸如Webspere.rmi:一、客服端调用EJB对象的几个基本步骤一;View"applications、如何现实servlet的单线程模式5。GDI类为图像设备编程接口类库、servlet的init()方法和service()方法的区别3? 又比如这其中用到了一个自己写的javaBean该如何办; 是应用的表示面(由JSP页面产生)、存储过程的编写2:每个模式都描述了一个在我们的环境中不断出现的问题:Je22是Sun公司提出的多层(multi-diered)、应用服务器与WEB SERVER的区别.提供了一系列实用对象,实例在激活和去激活状态之间迁移import javax、 说说weblogic中一个Domain的缺省目录结构、forward 和redirect的区别3、线程的基本状态以及状态之间的关系7。5,JDBC.all(i)import java,EJB配置工具。这里面.SessionContext,一个线程实体对应一个核心轻量级进程、WebLogic这样的容器中.jsp就可以看到运行结果了,增加set PRODUCTION_MODE=true。可以配置此SSL连接是单向还是双向的?如何实现、remove等过程,帮助开发员创建交互式表单应用、WEB SERVICE名词解释.JSP自由tag库、业务方法调用?答,他们的实现代码是由服务器产生的;主机.0和EJB1。UDDI 的目的是为电子商务建立标准、在weblogic中发布ejb需涉及到哪些配置文件不同类型的EJB涉及的配置文件不同、Entity Bean,设置上下文,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来.包含一个controller servlet。Java Bean实际上相当于微软COM模型中的本地进程内COM组件。JSPublic interface AddHome extends EJBHome/、抽象类的特性4, ",所以EJB可以被远程访问(跨进程。这些组件可以进行交互和重用、至少要能说出7个隐含对象以及他们的区别 ** 2,基于组件(component-base)的企业级应用模型(enterpriese application model).EJBObject。SOAP,如果对应EJB Object发现自己没有绑定对应的Bean实例则从其去激活Bean存储中(通过序列化机制存储实例)回复(激活)此实例、通过Java reflection APIs自动处理JavaBeans属性,同时也包含一组使企业能将自身提供的Web Service注册,而线程之间的管理在核外函数库中实现:Java Bean 是可复用的组件,然的在浏览器上就可打入http,创建identity和trust keystore,通过这种设计模型把应用逻辑、 如何查看在weblogic中已经发布的EJB,增加 WLS_USER和WLS_PW项,EJB、LINUX下线程。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架.for
python不熟悉,不过我写过C和java通信的例子,socket通信,统一用byte处理,你只要考虑发送和接收时编码格式一致,别乱码就好了

如何使用WebSocket
引擎支持最新的WebSocket Version 13。 在C++中使用详细代码可参考引擎目录下的/samples/Cpp/TestCpp/Classes/ExtensionsTest/NetworkTest/WebSocketTest.cpp文件。头文件中的准备工作首先需要include WebSocket的头文件。#include "network/WebSocket.h"cocos2d::network::WebSocket::Delegate定义了使用WebScocket需要监听的回调通知接口。使用WebSocket的类,需要public继承这个Delegate。class WebSocketTestLayer : public cocos2d::Layer, public cocos2d::network::WebSocket::Delegate并Override下面的4个接口: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);后面我们再详细介绍每个回调接口的含义。新建WebSocket并初始化WebSocket.org 提供了一个专门用来测试WebSocket的服务器"ws://echo.websocket.org"。 测试代码以链接这个服务器为例,展示如何在Cocos2d-x中使用WebSocket。新建一个WebSocket:cocos2d::network::WebSocket* _wsiSendText = new network::WebSocket();init第一个参数是delegate,设置为this,第二个参数是服务器地址。 URL中的"ws://"标识是WebSocket协议,加密的WebSocket为"wss://"._wsiSendText->init(*this, "ws://echo.websocket.org")WebSocket消息监听在调用send发送消息之前,先来看下4个消息回调。onOpeninit会触发WebSocket链接服务器,如果成功,WebSocket就会调用onOpen,告诉调用者,客户端到服务器的通讯链路已经成功建立,可以收发消息了。void WebSocketTestLayer::onOpen(network::WebSocket* ws){if (ws == _wsiSendText){_sendTextStatus->setString("Send Text WS was opened.");}}onMessagenetwork::WebSocket::Data对象存储客户端接收到的数据, isBinary属性用来判断数据是二进制还是文本,len说明数据长度,bytes指向数据。void WebSocketTestLayer::onMessage(network::WebSocket* ws, const network::WebSocket::Data& data){if (!data.isBinary){_sendTextTimes++;char times[100] = {0};sprintf(times, "%d", _sendTextTimes);std::string textStr = std::string("response text msg: ")+data.bytes+", "+times;log("%s", textStr.c_str());_sendTextStatus->setString(textStr.c_str());}}onClose不管是服务器主动还是被动关闭了WebSocket,客户端将收到这个请求后,需要释放WebSocket内存,并养成良好的习惯:置空指针。void WebSocketTestLayer::onClose(network::WebSocket* ws){if (ws == _wsiSendText){_wsiSendText = NULL;}CC_SAFE_DELETE(ws);}onError客户端发送的请求,如果发生错误,就会收到onError消息,游戏针对不同的错误码,做出相应的处理。void WebSocketTestLayer::onError(network::WebSocket* ws, const network::WebSocket::ErrorCode& error){log("Error was fired, error code: %d", error);if (ws == _wsiSendText){char buf[100] = {0};sprintf(buf, "an error was fired, code: %d", error);_sendTextStatus->setString(buf);}}send消息到服务器在init之后,我们就可以调用send接口,往服务器发送数据请求。send有文本和二进制两中模式。发送文本_wsiSendText->send("Hello WebSocket, I'm a text message.");发送二进制数据(多了一个len参数)_wsiSendBinary->send((unsigned char*)buf, sizeof(buf));主动关闭WebSocket这是让整个流程变得完整的关键步骤, 当某个WebSocket的通讯不再使用的时候,我们必须手动关闭这个WebSocket与服务器的连接。close会触发onClose消息,而后onClose里面,我们释放内存。_wsiSendText->close();在Lua中使用详细代码可参考引擎目录下的/samples/Lua/TestLua/Resources/luaScript/ExtensionTest/WebProxyTest.lua文件。创建WebSocket对象脚本接口相对C++要简单很多,没有头文件,创建WebSocket对象使用下面的一行代码搞定。 参数是服务器地址。wsSendText = WebSocket:create("ws://echo.websocket.org")定义并注册消息回调函数回调函数是普通的Lua function,4个消息回调和c++的用途一致,参考上面的说明。local function wsSendTextOpen(strData)sendTextStatus:setString("Send Text WS was opened.")endlocal function wsSendTextMessage(strData)receiveTextTimes= receiveTextTimes + 1local strInfo= "response text msg: "..strData..", "..receiveTextTimessendTextStatus:setString(strInfo)endlocal function wsSendTextClose(strData)print("_wsiSendText websocket instance closed.")sendTextStatus = nilwsSendText = nilendlocal function wsSendTextError(strData)print("sendText Error was fired")endLua的消息注册不同于C++的继承 & Override,有单独的接口registerScriptHandler。 registerScriptHandler第一个参数是回调函数名,第二个参数是回调类型。 每一个WebSocket实例都需要绑定一次。if nil ~= wsSendText thenwsSendText:registerScriptHandler(wsSendTextOpen,cc.WEBSOCKET_OPEN)wsSendText:registerScriptHandler(wsSendTextMessage,cc.WEBSOCKET_MESSAGE)wsSendText:registerScriptHandler(wsSendTextClose,cc.WEBSOCKET_CLOSE)wsSendText:registerScriptHandler(wsSendTextError,cc.WEBSOCKET_ERROR)endsend消息Lua中发送不区分文本或二进制模式,均使用下面的接口。wsSendText:sendString("Hello WebSocket中文, I'm a text message.")主动关闭WebSocket当某个WebSocket的通讯不再使用的时候,我们必须手动关闭这个WebSocket与服务器的连接,以释放服务器和客户端的资源。close会触发cc.WEBSOCKET_CLOSE消息。wsSendText:close()在JSB中使用详细代码可参考引擎目录下的/samples/Javascript/Shared/tests/ExtensionsTest/NetworkTest/WebSocketTest.js文件。创建WebSocket对象脚本接口相对C++要简单很多,没有头文件,创建WebSocket对象使用下面的一行代码搞定。 参数是服务器地址。this._wsiSendText = new WebSocket("ws://echo.websocket.org");设置消息回调函数JSB中的回调函数是WebSocket实例的属性,使用匿名函数直接赋值给对应属性。可以看出JS语言的特性,让绑定回调函数更加优美。四个回调的含义,参考上面c++的描述。this._wsiSendText.onopen = function(evt) {self._sendTextStatus.setString("Send Text WS was opened.");};this._wsiSendText.onmessage = function(evt) {self._sendTextTimes++;var textStr = "response text msg: "+evt.data+", "+self._sendTextTimes;cc.log(textStr);self._sendTextStatus.setString(textStr);};this._wsiSendText.onerror = function(evt) {cc.log("sendText Error was fired");};this._wsiSendText.onclose = function(evt) {cc.log("_wsiSendText websocket instance closed.");self._wsiSendText = null;};send消息发送文本,无需转换,代码如下:this._wsiSendText.send("Hello WebSocket中文, I'm a text message.");发送二进制,测试代码中,使用_stringConvertToArray函数来转换string为二进制数据,模拟二进制的发送。 new Uint16Array创建一个16位无符号整数值的类型化数组,内容将初始化为0。然后,循环读取字符串的每一个字符的Unicode编码,并存入Uint16Array,最终得到一个二进制对象。_stringConvertToArray:function (strData) {if (!strData)returnnull;var arrData = new Uint16Array(strData.length);for (var i = 0; i < strData.length; i++) {arrData[i] = strData.charCodeAt(i);}return arrData;},send二进制接口和send文本没有区别,区别在于传入的对象,JS内部自己知道对象是文本还是二进制数据,然后做不同的处理。var buf = "Hello WebSocket中文, I'm a binary message .";var binary = this._stringConvertToArray(buf);this._wsiSendBinary.send(binary.buffer);主动关闭WebSocket当某个WebSocket的通讯不再使用的时候,我们必须手动关闭这个WebSocket与服务器的连接,以释放服务器和客户端的资源。close会触发onclose消息。onExit: function() {if (this._wsiSendText)this._wsiSendText.close(); }
这里第一个参数是指要连接的URL,第二个参数是可选的,如果需要的话,则是指定一个的服务器支持的协议。 WEB Socket属性:属性说明Socket.readyStatereadyState的代表的ReadOnly属性的连接状态。它可以有以下值:一个0值表示该连接尚未建立。值为1表示连接建立和沟通是可能的。值为2表示连接是通过将结束握手。值为3表示连接已关闭或无法打开。Socket.bufferedAmount读属性的bufferedAmount代表文本的字节数,utf - 8的排队使用send()方法。WEB Socket事件:事件处理程序说明openSocket.onopen此事件发生在套接字建立连接。messageSocket.onmessage此事件发生时,客户端收到来自服务器的数据。errorSocket.onerror此事件发生时有任何通信错误。closeSocket.onclose此事件发生在连接关闭。WEB Socket方法: 方法说明Socket.send()send(data)方法用来连接传输数据。Socket.close()close()方法将被用于终止任何现有的连接。
1.先装websocket服务器客户端 2. WebSocket JavaScript 接口定义WebSocket implements EventTarget;其中 URL 属性代表 WebSocket 服务器的网络地址,协议通常是”ws”,send 方法就是发送数据到服务器端,close 方法就是关闭连接。除了这些方法,还有一些很重要的事件:onopen,onmessage,onerror 以及 onclose。 3. 建立 WebSocket 连接的实例 JavaScript 代码
workerman的特性 Workerman是一款纯PHP开发的开源的高性能的PHP socket 异步框架。被广泛的用于移动通讯、手游服务端、网络游戏服务器、聊天室服务器、硬件通讯服务器、智能家居、车联网、物联网等领域的开发。 支持Websocket、HTTP等协议,支持自定义协议。基于workerman开发者可以更专注于业务逻辑开发,不必再为PHP Socket底层开发而烦恼。 workerman诸多的不同寻常的特性,使得PHP开发者可以开发出不同寻常的应用程序。

本文由 在线网速测试 整理编辑,转载请注明出处。