使用C++实现WebSocket服务的一个测试
2016-09-29 15:56
786 查看
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服务是否可用。
[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
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++自动化测试程序
- 学习实践:使用模式,原则实现一个C++自动化测试程序
- 学习实践:使用模式,原则实现一个C++自动化测试程序
- C++ 使用模版范式写一个单例模式的类--简单实现单例模式
- 使用WDM驱动实现在NT下读取物理端口,特殊寄存器,物理内存的代码(C++测试代码)
- c++实现写一个函数,求2个整数的和,要求在函数体内不得使用+,-* /
- 在单链表的基础上用c++实现的链栈,并使用进制转换,表达式求值两个小程序来测试
- binder 一个简单的c++服务的实现,与callback实现
- 使用WinWebMail 简单搭建一个局域网邮件服务 并 测试
- 使用 Bluemix 和 AppScan Mobile Analyzer 服务构建一个 Android 应用程序安全测试工具
- 如何使用jQuery+PHP+MySQL来实现一个在线测试项目
- 使用cvsnt与wincvs实现cvs的架设(最近笔者想架设一个版本管理器,现在仍然在测试中)
- 使用C++实现SDK之WebBrowser容器 系列的一个补充. 关于GetHtmlDocumentX()
- C++ 使用gsoap实现webservice服务
- 使用c++实现一个FTP客户端(一)
- 如何使用jQuery+PHP+MySQL来实现一个在线测试项目
- 对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?
- 纪念逝去的岁月——C++实现一个栈(使用类模板)
- 简单实现一个Websocket服务
- 学习实践:使用模式,原则实现一个C++数据库访问类