.net , java webSocket 连接 Socket.io (1.4.4版本) 问题
2016-01-19 11:06
597 查看
.net版Socketio4net类库和java版socket.io-java-client类库 连接socket.io 1.4版本都不行,网上大多是socket.io 0.9版本的,socket.io 更新之后就不支持了。本人已研究
成功连接socket.io 1.4版本的方法,例子采用C#。
这几个是定义消息类型的 websocket连接的时候在open事件里需要发送一个send("5[\"simple\",{\"name\":\"simple\"}]"); 类型为5的消息。
View Code
连接之后在open 事件里需要发送一个类型为5(upgrade 心跳)的消息websocket.send("5[\"simple\",{\"name\":\"simple\"}]");,然后websocket会收到一个“40”消息,
40代表连接功能了,可以进行通信了。
一般发送消息的格式为:"42[\"simple\",{\"name\":\"tstssss\"}]"
42:代表消息类型,simple为socket.io的事件名称。
send("5:::");
成功连接socket.io 1.4版本的方法,例子采用C#。
一、socket.io 几个重要要文件
1、node_modules\socket.io\node_modules\engine.io\node_modules\engine.io-parser\lib\index.jsvar packets = exports.packets = { open: 0 // non-ws , close: 1 // non-ws , ping: 2 , pong: 3 , message: 4 , upgrade: 5 , noop: 6 };
这几个是定义消息类型的 websocket连接的时候在open事件里需要发送一个send("5[\"simple\",{\"name\":\"simple\"}]"); 类型为5的消息。
public void Connect() { lock (padLock) { if (!(this.ReadyState == WebSocketState.Connecting || this.ReadyState == WebSocketState.Open)) { try { this.ConnectionOpenEvent.Reset(); this.HandShake = this.requestHandshake(uri);// perform an initial HTTP request as a new, non-handshaken connection if (this.HandShake == null || string.IsNullOrWhiteSpace(this.HandShake.SID) || this.HandShake.HadError) { this.LastErrorMessage = string.Format("Error initializing handshake with {0}", uri.ToString()); this.OnErrorEvent(this, new ErrorEventArgs(this.LastErrorMessage, new Exception())); } else { String sss = "ws://127.0.0.1:3000/socket.io/?eio=3&t=124324324324&transport=websocket&sid=" + this.HandShake.SID; //sss = "ws://127.0.0.1:3000/socket.io/?transport=polling&t=12434324324324&sid=" + this.HandShake.SID; //string.Format("{0}://{1}:{2}/socket.io/1/websocket/{3}", wsScheme, uri.Host, uri.Port, this.HandShake.SID) string wsScheme = (uri.Scheme == Uri.UriSchemeHttps ? "wss" : "ws"); this.wsClient = new WebSocket( sss, string.Empty, this.socketVersion); this.wsClient.EnableAutoSendPing = false; // #4 tkiley: Websocket4net client library initiates a websocket heartbeat, causes delivery problems this.wsClient.Opened += this.wsClient_OpenEvent; this.wsClient.MessageReceived += this.wsClient_MessageReceived; this.wsClient.Error += this.wsClient_Error; this.wsClient.Closed += wsClient_Closed; this.wsClient.Open(); } } catch (Exception ex) { Trace.WriteLine(string.Format("Connect threw an exception...{0}", ex.Message)); this.OnErrorEvent(this, new ErrorEventArgs("SocketIO.Client.Connect threw an exception", ex)); } } } }
View Code
连接之后在open 事件里需要发送一个类型为5(upgrade 心跳)的消息websocket.send("5[\"simple\",{\"name\":\"simple\"}]");,然后websocket会收到一个“40”消息,
40代表连接功能了,可以进行通信了。
一般发送消息的格式为:"42[\"simple\",{\"name\":\"tstssss\"}]"
42:代表消息类型,simple为socket.io的事件名称。
四、定时发送心跳数据
授权的时候能获取到"pingInterval":25000,"pingTimeout":60000 心跳间隔和超时的时间,需要每隔 pingInterval 时间 发送一次心跳数据才能保存不断开连接。send("5:::");
相关文章推荐
- 数据库表到java类转换工具
- Java实现Excel导入数据库,数据库中的数据导入到Excel
- eclipse生成可执行jar包
- 使用Java的RMI完成远程调用
- Spring task @Async执行失败原因分析
- JavaSE入门学习3:搭建Java开发环境(一)
- JVM内存区域划分(JDK6/7/8中的变化)
- JVM内存区域划分(JDK6/7/8中的变化)
- Java变量以及内存分配(非常重要)
- Java变量以及内存分配
- spring 子类覆盖父类中注入的bean
- Java-面向对象概念
- springmvc学习3:处理器映射器和适配器
- Quartz使用问题: 如何将被Spring管理的类注入到不被Spring管理的Job类中
- 15、IO流
- eclipse中xml文件报错异常处理
- spring接口实现类 依赖注入
- 使用JAVA反射机制将简单JAVA been对象、数组转化为对应的Json串
- 【转】Java Thread.join()详解
- 用java下载hdfs文件报NullPointerException