使用C++实现WebSocket服务的一个测试
来源:互联网 发布:淘宝bt种子 编辑:程序博客网 时间:2024/06/05 04:46
Author: kagula
Date: 2016-09-29
Envrionment
[1]Boost 1.61
[2]VS2013 Professional Update5
[3]Windows7 64bits SP1
[4]Chrome 53.0.2785.116
[5]Opera 40.0
[6]Tomcat 7.0.68
用来测试Java实现的Websocket服务,参考资料3。
Prologue
测试Websocket++库实现Websocket服务技术上是否可行,这个库只依赖boost,使用的时候只要包含这个库的头文件就可以了。
Content
[Step1]从Github的Master branch下载0.7.0
[Step2]使用cmake在“D:\SDK\websocketpp-master070\2013”
下创建vs2013 sln文件。
[Step3]
VS中新建Win32 Console Solution with Blank option.我取名为“MyEchoServer”
copy echo_server.cpp和echo_handler.hpp到新建的solution目录中,并把它们加入到solution中。
这两个文件在下面目录中
D:\SDK\websocketpp-master070\examples\echo_server
其中D:\SDK\websocketpp-master070是我压缩包的解压路径。
[Step4]
头文件和库文件search path设置为
D:\SDK\boost_1_61_0
D:\SDK\boost_1_61_0\vc12\lib
因为我机器上有多种编译器,所以library被放在了vc12\lib下面。
依赖库设置为以下
boost_system-vc120-mt-1_61.lib
boost_thread-vc120-mt-1_61.lib
boost_random-vc120-mt-1_61.lib
boost_chrono-vc120-mt-1_61.lib
boost_date_time-vc120-mt-1_61.lib
boost_atomic-vc120-mt-1_61.lib
添加下面的宏定义
_SCL_SECURE_NO_WARNINGS
我使用Property Sheet文件,免得每个Websocket++项目我都要重建设置一遍。
[Step5]Build Success.
复制下面6个文件到"D:\workspace\MyEchoServer\Debug"
boost_atomic-vc120-mt-1_61.dll
boost_chrono-vc120-mt-1_61.dll
boost_date_time-vc120-mt-1_61.dll
boost_random-vc120-mt-1_61.dll
boost_system-vc120-mt-1_61.dll
boost_thread-vc120-mt-1_61.dll
现在可以跑起来了。
[Step6]参考上面的Steps新建MyEchoClient
源文件在"D:\SDK\websocketpp-master070\examples\echo_client"路径,就一个,编译并运行。
连接服务端成功。
[Step7]
让我们新建html页面,这样可以通过Browser测试C++实现的WebSocket服务是否可用。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"></head> <body> <div> <input type="submit" value="Start" onclick="start()" /> </div> <div id="messages"></div> <script type="text/javascript"> //var webSocket = new WebSocket('ws://localhost:8080/testWebSocketProtocol/websocket'); var webSocket = new WebSocket('ws://localhost:9002'); webSocket.onerror = function(event) { onError(event) }; webSocket.onopen = function(event) { onOpen(event) }; webSocket.onmessage = function(event) { onMessage(event) }; function onMessage(event) { document.getElementById('messages').innerHTML += '<br />Get Message From Server: ' + event.data; } function onOpen(event) { document.getElementById('messages').innerHTML = 'Connection established'; } function onError(event) { alert(event.data); alert("error"); } function start() { webSocket.send('hello'); return false; } </script> </body> </html>
[Step8]
在浏览器中采用下面两种方式浏览页面均成功链接用C++实现的Websocket服务端.
“file:///D:/workspace_java/testWebSocketProtocol/WebContent/a.html”
“http://localhost:8080/testWebSocketProtocol/a.html”
Remark:
[1]使用Java Spring4可以很容易的实现Websocket服务。
[2]websocket的链接数限制,IE5个。chrome250+左右,火狐200+左右!
FQA
Q Browser提示握手之前链接已经关闭。
A After i take two hours i found the cause, the solution is
shutdown Fan Qiang,then restart WebSocket Server and refresh Browser, the problem is disappear。
Reference:
[1]Websocket++ Official site
https://www.zaphoyd.com/websocketpp
《Creating a Websocket server with Websocket++》
[2]https://mayaposch.wordpress.com/2015/09/16/creating-a-websocket-server-with-websocket/
[3]《webSocket 入门demo》
Server端用java实现,没有用到任何第三方jar
http://hbiao68.iteye.com/blog/1973906
Appendix
[1]《spring websocket自动断开连接再创建引发的问题解决方案》
http://www.cnblogs.com/interdrp/p/4828573.html
[2]《Reconnecting Web Socket》
http://www.oschina.net/p/reconnectingwebsocket
- 使用C++实现WebSocket服务的一个测试
- 使用Vert.x实现一个简单的websocket聊天室
- 使用curl测试websocket服务是否能正常连入
- python 实现一个简单的 WebSocket 服务器
- php之websocket服务使用(弹幕实现)
- 使用WebSocket实现即使通讯(实现一个群聊的聊天室)
- 使用WebSocket实现即使通讯(实现一个群聊的聊天室)
- 使用spring-websocket包搭建websocket服务
- WebSocket + Spring消息推送服务的快速实现
- 实现使用Websocket通讯的聊天室
- 使用ExtJS+WebSocket实现的WebQQ聊天
- 使用Tomcat8实现WebSocket的简单例子
- iOS使用webSocket的简单实现
- android 使用websocket 实现简单的聊天。
- C语言动手实现一个自己的HttP服务
- 使用php创建WebSocket服务
- 使用php创建WebSocket服务
- Jmeter实现WebSocket的接口测试的插件包
- 一个问题引发对Linux swap和内存的思考
- Java中判断字符串是否为数字的方法:
- ios developer tiny share-20160919
- springMVC入门
- 自己写的一个利用h5py保存hdf文件的例子,留存!
- 使用C++实现WebSocket服务的一个测试
- 《java多线程编程核心技术》读书笔记6:线程中的异常处理
- 机器学习实战(三)--朴素贝叶斯
- 走进AngularJs的路由机制
- JavaScript阻塞
- DispatcherServlet详解
- 使用Dom4j解析XML
- Java 字符串常用操作
- 读完《暗时间》后的一些想法