您的位置:首页 > 编程语言 > C语言/C++

使用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服务是否可用。

<!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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐