websocket++简单使用例子
前言
html5支持使用websocket协议与服务器保持一个长连接,方便双方互相传输数据,而且服务器也能主动发送信息给客户端,而在这之前使用HTTP是很难做到的。下面介绍使用C++实现的websocket++的简单使用。websocket++更详细介绍点此。
websocket++需要boost的支持,所以工程中需要包含boost的头文件和库。boost在VS中的如何使用参考此文章。
C++代码
#include "stdafx.h"
#include <iostream> using namespace std; #include <websocketpp/config/asio_no_tls.hpp>
#include <websocketpp/server.hpp> typedef websocketpp::server<websocketpp::config::asio> WebsocketServer;
typedef WebsocketServer::message_ptr message_ptr; using websocketpp::lib::placeholders::_1;
using websocketpp::lib::placeholders::_2;
using websocketpp::lib::bind; void OnOpen(WebsocketServer *server, websocketpp::connection_hdl hdl)
{
cout << "have client connected" << endl;
} void OnClose(WebsocketServer *server, websocketpp::connection_hdl hdl)
{
cout << "have client disconnected" << endl;
} void OnMessage(WebsocketServer *server, websocketpp::connection_hdl hdl, message_ptr msg)
{
string strMsg = msg->get_payload();
cout << strMsg << endl; string strRespon = "receive: ";
strRespon.append(strMsg); server->send(hdl, strRespon, websocketpp::frame::opcode::text);
} int main()
{
WebsocketServer server; // Set logging settings
server.set_access_channels(websocketpp::log::alevel::all);
server.clear_access_channels(websocketpp::log::alevel::frame_payload); // Initialize ASIO
server.init_asio(); // Register our open handler
server.set_open_handler(bind(&OnOpen, &server, ::_1)); // Register our close handler
server.set_close_handler(bind(&OnClose, &server, _1)); // Register our message handler
server.set_message_handler(bind(&OnMessage, &server, _1, _2)); //Listen on port 2152
server.listen(); //Start the server accept loop
server.start_accept(); //Start the ASIO io_service run loop
server.run(); return ;
}
Html代码
<!DOCTYPE html>
<html>
<head>
<title>Testing websockets</title>
</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:8090'); webSocket.onerror = function(event) {
onError(event)
}; webSocket.onopen = function(event) {
onOpen(event)
}; webSocket.onclose = function(event) {
onClose(event)
}; webSocket.onmessage = function(event) {
onMessage(event)
}; function onMessage(event) {
document.getElementById('messages').innerHTML
+= '<br />' + event.data;
} function onOpen(event) {
document.getElementById('messages').innerHTML
= 'Connection established';
} function onClose(event) {
document.getElementById('messages').innerHTML
+= '<br />disconnection';
}
function onError(event) {
alert(event.data);
} function start() {
webSocket.send('hello');
return false;
}
</script>
</body>
</html>
运行结果
websocket++简单使用例子的更多相关文章
- HTTP协议系列(3)---包括WebSocket简单介绍
一.HTTPS HTTP是超文本传输协议,那HTTPS是什么尼?要明白HTTPS是什么先要明白HTTP的缺点,想一下我们在使用HTTP的时候会有那些缺点尼? 1.通信使用的明文(不加密),内容 ...
- websocket简单入门
今天说起及时通信的时候,突然被问到时用推的方式,还是定时接受的方式,由于之前页面都是用传统的ajax处理,可能对ajax的定时获取根深蒂固了,所以一时之间没有相同怎么会出现推的方式呢?当被提及webs ...
- 简单的例子了解自定义ViewGroup(一)
在Android中,控件可以分为ViewGroup控件与View控件.自定义View控件,我之前的文章已经说过.这次我们主要说一下自定义ViewGroup控件.ViewGroup是作为父控件可以包含多 ...
- CSharpGL(1)从最简单的例子开始使用CSharpGL
CSharpGL(1)从最简单的例子开始使用CSharpGL 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo ...
- 用一个简单的例子来理解python高阶函数
============================ 用一个简单的例子来理解python高阶函数 ============================ 最近在用mailx发送邮件, 写法大致如 ...
- Spring-Context之一:一个简单的例子
很久之前就想系统的学习和掌握Spring框架,但是拖了很久都没有行动.现在趁着在外出差杂事不多,就花时间来由浅入深的研究下Spring框架.Spring框架这几年来已经发展成为一个巨无霸产品.从最初的 ...
- WebSocket简单介绍
Java后端WebSocket的Tomcat实现 一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSoc ...
- C#调用存储过程简单完整例子
CREATE PROC P_TEST@Name VARCHAR(20),@Rowcount INT OUTPUTASBEGIN SELECT * FROM T_Customer WHERE NAME= ...
- 关于apriori算法的一个简单的例子
apriori算法是关联规则挖掘中很基础也很经典的一个算法,我认为很多教程出现大堆的公式不是很适合一个初学者理解.因此,本文列举一个简单的例子来演示下apriori算法的整个步骤. 下面这个表格是代表 ...
随机推荐
- 2015 CCPC D- Pick The Sticks(UESTC 1218) (01背包变形)
http://acm.uestc.edu.cn/#/problem/show/1218 既然二维dp表示不了,就加一维表示是否在边界放置,放置一个,两个.有一个trick就是如果只放一根,那么多长都可 ...
- UILabel文本垂直顶部对齐的方法
也不知道为什么UILabel本身没有提供文本垂直顶部对齐的方法,真的有点晕.我们创建一个简单的UILabel来看看: [box type="info"] UILabel *myLa ...
- mac下apache启动关闭操作
1.一般的命令如下: 2.但是这种方法在mac上有的时候不生效 3.根据上面的提示使用下面的方法,可以生效,mac上很多应用都可以采用这种方式启动.关闭应用 sudo launchctl load / ...
- iframe与include的区别
iframe与include区别和使用问题 1.iframe可以用在静态和动态页面,include只能用在动态页面. 2.iframe是视图级组合,include是代码级组合. 3.iframe独立成 ...
- jQuery中get与eq的区别
get与eq的区别 .eq() 减少匹配元素的集合,根据index索引值,精确指定索引对象. .get() 通过检索匹配jQuery对象得到对应的DOM元素. 同样是返回元素,那么eq与get有什么区 ...
- HDU 1518 Square
解题思路:sum%4!=0 , max<sum/4 #include<iostream>#include<cstdio>#include<cstring> ...
- OceanBase里面的rowkey是什么概念,是由哪些要素构成的?
Rowkey是OceanBase诞生之初就引入的概念,最终被确立是在OceanBase 0.3. 为了便于理解,不妨把OceanBase想象成一个Key-Value系统,Rowkey就是Key,Val ...
- Linq to SQL 简单增删改查
用Linq大大减少了对数据库的一般操作所需的编码量.运行下面事例之前,首先建一个叫做Alien的数据库表. CREATE TABLE [dbo].[Aliens]( [Id] [int] IDE ...
- 13 引用WINAPI
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetWind ...
- Apache的prefork模式和worker模式(转)
prefork模式这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请求 ...