【websocket-sharp】使用
一 介绍
WebSocket# 提供了实现WebSocket协议客户端和服务器。
WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端
二 用法
创建一个控制台程序,从Nuget添加引用websocket-sharp
public static void Main (string[] args)
{
var wssv=new WebSocketServer(null, );//创建一个websocket服务对象,2018是端口号
wssv.start();//开始接收websocket
Console.ReadKey (true);
wssv.Stop ();//关闭
}
如果需要使用wss(比如微信小程序中,只接受wss不接受ws,)
则在创建websocket服务对象的第三个参数中加入如下代码
var ssl = new ServerSslConfiguration(new X509Certificate2
(@"D:证书\132456.pfx", ""), false,
System.Security.Authentication.SslProtocols.Tls11);
var wssv = new WebSocketServer(null, , ssl);
接着创建一个类继承WebSocketBehavior
public class ChatRoom : WebSocketBehavior
{
protected override async Task OnMessage(MessageEventArgs e)
{
//传来的消息
var memid = Context.GetQueryString().Result["memid"];//通过此方法可以获取传来的查询字符串值
memberEntity = new tb_memberEntity();//会员实体类,此处会意即可,不贴具体代码
if (!memid.IsEmpty())
{
memberEntity = new tb_memberBLL().GetEntity(memid);
}
else
{
memberEntity.nickname = "游客";
}
StreamReader reader = new StreamReader(e.Data, Encoding.UTF8);//读取发来的数据内容
var msgStr = reader.ReadToEnd();
await Sessions.Broadcast(new
{
content = msgStr,
name = memberEntity.nickname,
}.ToJson()); //将准备好的内容发送给“收听”的客户端
}
protected override async Task OnClose(CloseEventArgs e)
{
//处理关闭连接的响应
} protected override async Task OnOpen()
{
//处理打开连接的响应
} protected override async Task OnError(WebSocketSharp.ErrorEventArgs e)
{
//处理异常事件
Console.WriteLine(e.Message + "\t\r" + DateTime.Now);
}
}
回到刚刚的mian方法中,在wssv.Start();后插入如下代码,相当于创建了一个聊天间
wssv.AddWebSocketService<ChatRoom >("roomName");
写完收工,接着F5运行一下
三 测试
此处我通过html来实现客户端
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="messages">
</div>
<input type="text" id="content" value="" />
<a id="sendbt" href="javascript:void(0);">发送</a>
</body> <script src="https://cdn.bootcss.com/jquery/1.8.3/jquery.min.js"></script>
<script>
var ws;
function initWS() {
if ("WebSocket" in window) {
ws = new WebSocket("ws://localhost:2018/roomName");
ws.onopen = function (e) {
console.log("Openened connection to websocket");
};
ws.onclose = function () {
console.log("Close connection to websocket");
// 断线重连
initWS();
}
ws.onerror = function (e) {
console.info("出错了");
console.info(e);
}
ws.onmessage = function (e) {
console.log("收到", e.data)
$("#messages").append(e.data);
}
} else {
alert("您的浏览器不支持 WebSocket!");
}
}
initWS();
function sendMsg(msg, type) {
var sendJosn = JSON.stringify({ Msg: msg, msgType: 1 });
try {
ws.send(sendJosn);
} catch (e) {
console.info(e);
}
}
$(function () {
$("#sendbt").click(function () {
var text = $("#content").val();
sendMsg(text, "1")
$("#content").val("");
})
$("#changebt").click(function () {
sendMsg(text, "2")
})
})
</script>
</html>
【websocket-sharp】使用的更多相关文章
- C#实现WebSocket协议客户端和服务器websocket sharp组件实例解析
看到这篇文章的题目,估计很多人都会问,这个组件是不是有些显的无聊了,说到web通信,很多人都会想到ASP.NET SignalR,或者Nodejs等等,实现web的网络实时通讯.有关于web实时通信的 ...
- 漫扯:从polling到Websocket
Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...
- 细说WebSocket - Node篇
在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...
- java使用websocket,并且获取HttpSession,源码分析
转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...
- WebSocket - ( 一.概述 )
说到 WebSocket,不得不提 HTML5,作为近年来Web技术领域最大的改进与变化,包含CSS3.离线与存储.多媒体.连接性( Connectivity )等一系列领域,而即将介绍的 WebSo ...
- php+websocket搭建简易聊天室实践
1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...
- Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...
- Cowboy 开源 WebSocket 网络库
Cowboy.WebSockets 是一个托管在 GitHub 上的基于 .NET/C# 实现的开源 WebSocket 网络库,其完整的实现了 RFC 6455 (The WebSocket Pro ...
- 借助Nodejs探究WebSocket
文章导读: 一.概述-what's WebSocket? 二.运行在浏览器中的WebSocket客户端+使用ws模块搭建的简单服务器 三.Node中的WebSocket 四.socket.io 五.扩 ...
- 细说websocket - php篇
下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket ...
随机推荐
- 常用工具说明--node.js是什么
简介 如果您听说过 Node,或者阅读过一些文章,宣称 Node 是多么多么的棒,那么您可能会想:“Node 究竟是什么东西?” 即便是在参阅 Node 的主页之后,您甚至可能还是 不明白 Node ...
- c#基础学习(0629)之导出Excel方法
给予NPOI插件的方法,所以首先要下载NPOI插件:vs项目中点击“项目”==>“管理NoGet程序包”==>搜索“NPOI”然后下载==>using引入Controller代码: ...
- 骆驼拼写法(CamelCase)
在英语中,依靠单词的大小写拼写复合词的做法,叫做"骆驼拼写法"(CamelCase).比如,backColor这个复合词,color的第一个字母采用大写. 这种拼写法在正规的英语中 ...
- javascript元素跟随鼠标在指定区域运动
元素跟随鼠标在指定区域运动通常是用在商城图片的放大镜中,下面是完整的Demo: <!DOCTYPE html> <html lang="en"> <h ...
- python简单验证码
安装图片处理模块pillow : pip install pillow pillow官网:http://pillow.readthedocs.io/en/latest/ 在views.py添加视图 ...
- Hive安装与应用过程
1. 参考说明 参考文档: https://cwiki.apache.org/confluence/display/Hive/GettingStarted 2. 安装环境说明 2.1. 环境说明 ...
- AR中的SLAM(二)
写在前面 本文想讨论一下AR的架构和SLAM在其中的作用. AR AR的框架可以简单划分为感知和交互两部分. 感知部分主要负责信息的收集和处理.信息主要通过不同的传感器收集,包括图像.设备加速度.距离 ...
- ahjesus wp-autopost破解版,亲测可用
在funtion.php里 把fetchUrl 这个函数的判断去掉 直接执行判断为真的结果下面是修改后的函数 function fetchUrl($_var_22){ global $w ...
- 3.Spring MVC return url问题总结
一.return "cartSuccess" 和 return "redirect:/cart/cart.html" 的区别 二.return modelAnd ...
- MySQL 、SQL MS Access、和 SQL Server 数据类型
MySQL 数据类型 在 MySQL 中,有三种主要的类型:Text(文本).Number(数字)和 Date/Time(日期/时间)类型. Text 类型: 数据类型 描述 CHAR(size) 保 ...