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(8090);

  //Start the server accept loop
  server.start_accept();

  //Start the ASIO io_service run loop
  server.run();

  return 0;
}

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++简单使用及实例分析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java Web项目中使用Socket通信多线程、长连接的方法

    很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听.我们的应用场景是在java项目中,需要外接如一个硬件设备,通过tcp通信,获取设备传上来的数据,并对数据做回应. 先看一下web的监听代码: import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class

  • 基于node实现websocket协议

    一.协议 WebSocket是一种基于TCP之上的客户端与服务器全双工通讯的协议,它在HTML5中被定义,也是新一代webapp的基础规范之一. 它突破了早先的AJAX的限制,关键在于实时性,服务器可以主动推送内容 到客户端!可能的应用有:多人在线游戏,即时聊天,实时监控,远程桌面,新闻服务器等等. 对于我自己,当前最想尝试的是canvas+websocket组合起来能做什么. 二.实现 由于握手的过程是一个标准的HTTP请求,因此 websocket 的实现有两种选择:1)TCP上实现: 2)

  • Java后端Tomcat实现WebSocket实例教程

    一.WebSocket简单介绍 WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).一开始的握手需要借助HTTP请求完成握手. 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据. WebSocket背景 在浏览器中通过http仅能实现单向的

  • 使用JavaWeb webSocket实现简易的点对点聊天功能实例代码

    首先给大家声明一点:需要 jdk 7 , tomcat需要支持websocket的版本  1.InitServlet 该类主要是用来初始化构造将来存储用户身份信息的map仓库,利用其初始化方法Init 初始化仓库, 利用其静态方法getSocketList 获得对应的用户身份信息. webSocket ,我认为MessageInbound 用来识别登录人的信息,用它来找到对应的人,推送消息.每次登录都会产生一个MessageInbound. 这里的 HashMap<String,MessageI

  • websocket++简单使用及实例分析

    前言 html5支持使用websocket协议与服务器保持一个长连接,方便双方互相传输数据,而且服务器也能主动发送信息给客户端,而在这之前使用HTTP是很难做到的.下面介绍使用C++实现的websocket++的简单使用.websocket++更详细介绍点此. websocket++需要boost的支持,所以工程中需要包含boost的头文件和库.boost在VS中的如何使用参考此文章. C++代码 #include "stdafx.h" #include <iostream>

  • go语言简单网络程序实例分析

    本文实例分析了go语言简单网络程序.分享给大家供大家参考.具体分析如下: 服务端代码如下: 复制代码 代码如下: package main import (     "net"     "os" ) func serve(s net.Conn) {     var buf [1024]byte     for {         n, err := s.Read(&buf)         if err != nil || n == 0 {         

  • PHP钩子与简单分发方式实例分析

    本文实例讲述了PHP钩子与简单分发方式.分享给大家供大家参考,具体如下: //简单的钩子实现例子 class tool{ public static function main($class, $fun, $data = ''){ //前置公共操作 $con = new $class; $con->$fun($data); //后置公共操作 } } class a{ function b($data){ echo '我是方法b'; } } class c{ function d($data){

  • go语言日志记录库简单使用方法实例分析

    本文实例讲述了go语言日志记录库简单使用方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (  "fmt"  "log"  "os" ) func main(){  logfile,err := os.OpenFile("/var/golang/jb51.net.log",os.O_RDWR|os.O_CREATE,0);  if err!=nil {   fmt.P

  • jQuery实现的超简单点赞效果实例分析

    本文实例讲述了jQuery实现的超简单点赞效果,分享给大家供大家参考,具体如下: 1.HTML(可以优化一下,尽量少些几个标签.....) <div id="dianz"> <b class="cz"><em>1</em><i></i><s></s><u>超赞</u></b> <b class="tj">

  • Python实现的简单线性回归算法实例分析

    本文实例讲述了Python实现的简单线性回归算法.分享给大家供大家参考,具体如下: 用python实现R的线性模型(lm)中一元线性回归的简单方法,使用R的women示例数据,R的运行结果: > summary(fit) Call: lm(formula = weight ~ height, data = women) Residuals:     Min      1Q  Median      3Q     Max -1.7333 -1.1333 -0.3833  0.7417  3.116

  • java文件的简单读写操作方法实例分析

    本文实例讲述了java文件的简单读写操作方法.分享给大家供大家参考,具体如下: Java重要的两个流 FileInputStream 该流用于从文件中读取数据. 1.可以使用字符串类型的文件名来创建一个输入流对象来读取文件. 例如: String filename = "D:\\java运行环境\\ZHL\\src\\java2018_8_5五子棋\\GobangMain.java"; InputStream in = new FileInputStream(filename); 2.

  • JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】

    本文实例讲述了JavaScript设计模式--简单工厂模式.分享给大家供大家参考,具体如下: 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方法不要写出Interface.prototype ,因为这是写到接口的原型链上的 //我们要把静态的函数直接写到类层次上 //(1)定义一个接口类 var Interface=function (name,methods) {//name:接口名字 if(argument

  • PHP常用文件操作函数和简单实例分析

    PHP最常用的文件操作就是读取和写入了,今天就主要讲解一下读取和写入函数,并且做一个页面访问的计数功能,来记录一个页面的访问量. fopen():PHP中没有文件创建函数,创建和打开文件都用fopen()函数,函数的形式为:resource fopen( string filename, string mode ) 参数filename为打开或创建并打开的文件名,参数mode为打开的模式,具体模式如下: fread():PHP中可用于读取文件,函数的形式为:string fread( resou

  • JavaScript进阶练习及简单实例分析

    当用户点击"统计"按钮时,在窗口中弹出文本框中出现次数最多的字符并显示其出现的次数 点击统计按钮时效果如图所示: 实现代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo

随机推荐