WebSocket是HTML5里提供的一种便于TCP长连接通讯的协议机制,随着HTML5的普及这种技术的使用会变得越来越广泛,由于Beetle可以灵活地扩展不同的协议,那自然而然对WebSocket支持也是一件非常简单的事情.对于WebSocket的协议分析处理就不详细描述可以参考下载程序有完整协议包代码,如果想更详细了解Websocket的协议可以到这里:http://datatracker.ietf.org/doc/rfc6455/?include_text=1

下面讲述如何使用Beetle非常方便地实现一个基于WebSocket的Hello wold程序.

服务端代码

    class Program:WebSocketServer{static void Main(string[] args){TcpUtils.Setup("beetle");Program server = new Program();server.Open(8088);Console.WriteLine("websocket start@8088");System.Threading.Thread.Sleep(-1);}protected override void OnConnected(object sender, ChannelEventArgs e){base.OnConnected(sender, e);}protected override void OnDisposed(object sender, ChannelDisposedEventArgs e){base.OnDisposed(sender, e);}protected override void OnError(object sender, ChannelErrorEventArgs e){base.OnError(sender, e);}protected override void OnWebSocketReceive(TcpChannel channel, DataPackage e){Console.WriteLine("MessageType:{0}", e.Type);Console.WriteLine("RequestPath:{0}", e.RequestPath);if (e.Type == PackageType.text){Console.WriteLine(e.ToString());DataPackage dp = new DataPackage();dp.Type = PackageType.text;dp.Data.Encoding("hello " + e.ToString(), Encoding.UTF8);channel.Send(dp);}}}

以上就是一个完整的websocket服务,代码非常简单WebSocketServer重写OnWebSocketReceive即可,在事件中根据需要处理对应的DataPackage即可,对于DataPackage的结构和类型实现参考下载代码.

Html代码

<html>
<meta charset="utf-8" />
<title>WebSocket Test</title>
<script language="javascript" type="text/javascript">var wsUri = "ws://127.0.0.1:8088/";var output;function init() {output = document.getElementById("output"); testWebSocket(); }function testWebSocket() {websocket = new WebSocket(wsUri);websocket.onopen = function (evt) { onOpen(evt) };websocket.onclose = function (evt) { onClose(evt) };websocket.onmessage = function (evt) { onMessage(evt) };websocket.onerror = function (evt) { onError(evt) };} function onOpen(evt) {writeToScreen("CONNECTED");}function onClose(evt) { writeToScreen("DISCONNECTED"); }function onMessage(evt) { document.getElementById('result').value = evt.data; }function onError(evt) { writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data); }function doSend(message) {  websocket.send(message); }function writeToScreen(message) {var pre = document.createElement("p"); pre.style.wordWrap = "break-word"; pre.innerHTML = message; output.insertBefore(pre);}function OnConnect() {wsUri = document.getElementById("url").value;init();}</script>
<body>
<fieldset>
<legend>WebSocket hello wold</legend><p><span>Server url:</span><input id="url" type="text"  value="ws://127.0.0.1:8088/"/><input type="button" value="Connected" οnclick="OnConnect()" /></p><p><span>Enter you name:</span><input id="youname" type="text"  value="test"/><input type="button" value="Submit" οnclick="doSend(document.getElementById('youname').value)" /></p><p><span>Result:</span><input id="result" type="text"  value=""/></p></fieldset>
<div id="output"></div>
</body>
</html>

运行效果

这样一个基于Hello wold的Websocket处理程序就完成.如果对Websocket感兴趣的朋友可以下载源代码了解websocket协议分析的原理,如何从byte[]分析出对应的websocket协议.

下载代码

简单实现一个Websocket服务相关推荐

  1. django之安装与简单起一个web服务

    Django 安装 pip install Django==1.11 # 安装django1.11版本 命令行创建django项目 django-admin startproject testpro ...

  2. websocket php MySQL_PHP写了一个websocket服务,mysql连接实例丢失问题怎么解决?

    我用ESD框架 他有个mysql插件,插件内获取mysql实例是用连接池的: public function mysql($name = "default") { $db = ge ...

  3. 【微服务 从0开始 】Spring Cloud 简单搭建一个微服务项目

  4. 如何用 Node.js 实现一个简单的 Websocket 服务?

    最近正在研究 Websocket 相关的知识,想着如何能自己实现 Websocket 协议.到网上搜罗了一番资料后用 Node.js 实现该协议,倒也没有想象中那么复杂,除去注释语句和 console ...

  5. js websocket同步等待_WebSocket硬核入门:200行代码,教你徒手撸一个WebSocket服务器...

    本文原题"Node.js - 200 多行代码实现 Websocket 协议",为了提升内容品质,有较大修订. 1.引言 最近正在研究 WebSocket 相关的知识,想着如何能自 ...

  6. 三分钟构建高性能 WebSocket 服务 | 超优雅的 SpringBoot 整合 Netty 方案

    前言 每当使用SpringBoot进行Weboscket开发时,最容易想到的就是spring-boot-starter-websocket(或spring-websocket).它可以让我们使用注解, ...

  7. python tornado websocket_基于Python Tornado框架的websocket服务

    WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. Tornado中定义了tornado.websocket.WebSocketHandler来处理webs ...

  8. 使用websocket-sharp来创建c#版本的websocket服务

    当前有一个需求,需要网页端调用扫描仪,javascript不具备调用能力,因此需要在机器上提供一个ws服务给前端网页调用扫描仪.而扫描仪有一个c#版本的API,因此需要寻找一个c#的websocket ...

  9. maven netty 配置_springboot2.3手册:5分钟用Netty搭建高性能异步WebSocket服务

    互联网应用架构:专注编程教学,架构,JAVA,Python,微服务,机器学习等领域,欢迎关注,一起学习. 断更快两个月了,6月份工作忙到飞起,7月份家里又有事,已经累到躺下就想睡觉的程度了. 现在我们 ...

最新文章

  1. 《强化学习周刊》第38期:DreamingV2、Shadow-price DRL、离线强化学习
  2. java游戏小程序_javaCode 158个经典小程序,里面包含各种小游戏代码,能提高初学者 趣,同事可以从中学习 Games 246万源代码下载- www.pudn.com...
  3. python编写的软件界面-为Python程序添加图形化界面的教程
  4. 【2018.4.7】模拟赛之四-ssl2385 猜数【水题】
  5. 计算机一级发邮件发送多个抄送,计算机一级考试IE题和收发邮件模拟题.docx
  6. leetcode-sort-colors
  7. Python之List和Tuple类型(入门3)
  8. WSS 3.0 和 sharepoint 2007 中文SDK
  9. .NET 5中的EF Core 5数据迁移:在单独的库中并自动部署
  10. diy无感无刷电机霍尔安装_霍尔传感器常见的有那几个类别
  11. 数据结构上机实践第八周项目4-字符串加密
  12. eclipse 配色方案
  13. worldwind java 教程_科学网—用worldwind java SDK开发应用程序 - 谢安涛的博文
  14. mysql 水晶报表_Crystal Reports 2008(水晶报表) JDBC连接mysql数据库
  15. pci总线扫描及pci网卡驱动
  16. 【软件工程】根据数据流图导出程序结构
  17. 使用websocket实现协同编辑
  18. 金融投资理财基础知识
  19. Quartus II 13.1安装时出现的问题
  20. python bug

热门文章

  1. 【AI产品】你我当年的老照片,如今修复了可还行?
  2. 全球及中国医疗监护仪市场容量需求与投资竞争力研究报告2022版
  3. 统计每日单量MySQL语句
  4. PD003-NET通用后台系统
  5. 中粮国际对话国际农民丰收节贸易会 谋定国际农贸现代化
  6. openresty开发系列21--lua的模块
  7. Go 转义字符及风格
  8. 剑指Offer:合并两个排序的链表【25】
  9. jQuery插件实战之fullcalendar(日历插件)Demo
  10. Linux常用命令英文全称与中文解释Linux系统