简单实现一个Websocket服务
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服务相关推荐
- django之安装与简单起一个web服务
Django 安装 pip install Django==1.11 # 安装django1.11版本 命令行创建django项目 django-admin startproject testpro ...
- websocket php MySQL_PHP写了一个websocket服务,mysql连接实例丢失问题怎么解决?
我用ESD框架 他有个mysql插件,插件内获取mysql实例是用连接池的: public function mysql($name = "default") { $db = ge ...
- 【微服务 从0开始 】Spring Cloud 简单搭建一个微服务项目
- 如何用 Node.js 实现一个简单的 Websocket 服务?
最近正在研究 Websocket 相关的知识,想着如何能自己实现 Websocket 协议.到网上搜罗了一番资料后用 Node.js 实现该协议,倒也没有想象中那么复杂,除去注释语句和 console ...
- js websocket同步等待_WebSocket硬核入门:200行代码,教你徒手撸一个WebSocket服务器...
本文原题"Node.js - 200 多行代码实现 Websocket 协议",为了提升内容品质,有较大修订. 1.引言 最近正在研究 WebSocket 相关的知识,想着如何能自 ...
- 三分钟构建高性能 WebSocket 服务 | 超优雅的 SpringBoot 整合 Netty 方案
前言 每当使用SpringBoot进行Weboscket开发时,最容易想到的就是spring-boot-starter-websocket(或spring-websocket).它可以让我们使用注解, ...
- python tornado websocket_基于Python Tornado框架的websocket服务
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. Tornado中定义了tornado.websocket.WebSocketHandler来处理webs ...
- 使用websocket-sharp来创建c#版本的websocket服务
当前有一个需求,需要网页端调用扫描仪,javascript不具备调用能力,因此需要在机器上提供一个ws服务给前端网页调用扫描仪.而扫描仪有一个c#版本的API,因此需要寻找一个c#的websocket ...
- maven netty 配置_springboot2.3手册:5分钟用Netty搭建高性能异步WebSocket服务
互联网应用架构:专注编程教学,架构,JAVA,Python,微服务,机器学习等领域,欢迎关注,一起学习. 断更快两个月了,6月份工作忙到飞起,7月份家里又有事,已经累到躺下就想睡觉的程度了. 现在我们 ...
最新文章
- 《强化学习周刊》第38期:DreamingV2、Shadow-price DRL、离线强化学习
- java游戏小程序_javaCode 158个经典小程序,里面包含各种小游戏代码,能提高初学者 趣,同事可以从中学习 Games 246万源代码下载- www.pudn.com...
- python编写的软件界面-为Python程序添加图形化界面的教程
- 【2018.4.7】模拟赛之四-ssl2385 猜数【水题】
- 计算机一级发邮件发送多个抄送,计算机一级考试IE题和收发邮件模拟题.docx
- leetcode-sort-colors
- Python之List和Tuple类型(入门3)
- WSS 3.0 和 sharepoint 2007 中文SDK
- .NET 5中的EF Core 5数据迁移:在单独的库中并自动部署
- diy无感无刷电机霍尔安装_霍尔传感器常见的有那几个类别
- 数据结构上机实践第八周项目4-字符串加密
- eclipse 配色方案
- worldwind java 教程_科学网—用worldwind java SDK开发应用程序 - 谢安涛的博文
- mysql 水晶报表_Crystal Reports 2008(水晶报表) JDBC连接mysql数据库
- pci总线扫描及pci网卡驱动
- 【软件工程】根据数据流图导出程序结构
- 使用websocket实现协同编辑
- 金融投资理财基础知识
- Quartus II 13.1安装时出现的问题
- python bug