前言

fleck 比较简洁,想看下他的源码的,先感受一下demo吧。

正文

先上代码。

static  IDictionary<string, IWebSocketConnection>  dic_Sockets = new Dictionary<string, IWebSocketConnection>();
public static void startwebsocket()
{
//客户端url以及其对应的Socket对象字典
//创建
WebSocketServer server = new WebSocketServer("wss://172.18.13.202:30000");//监听所有的的地址
server.Certificate = new X509Certificate2(@"D:\ssl\www\cert.pfx", "214867098930248");
//出错后进行重启
server.RestartAfterListenError = true;
server.SupportedSubProtocols = new[] { "superchat", "chat" };
//开始监听
server.Start(socket =>
{
socket.OnOpen = () => //连接建立事件
{
//获取客户端网页的url
string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
dic_Sockets.Add(clientUrl, socket);
//Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 建立WebSock连接!");
};
socket.OnClose = () => //连接关闭事件
{
string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
//如果存在这个客户端,那么对这个socket进行移除
if (dic_Sockets.ContainsKey(clientUrl))
{
//注:Fleck中有释放
//关闭对象连接
//if (dic_Sockets[clientUrl] != null)
//{
//dic_Sockets[clientUrl].Close();
//}
dic_Sockets.Remove(clientUrl);
}
Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 断开WebSock连接!");
};
socket.OnMessage = message => //接受客户端网页消息事件
{
string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
Console.WriteLine(DateTime.Now.ToString() + "|服务器:【收到】来客户端网页:" + clientUrl + "的信息:\n" + message);
};
}); //关闭与客户端的所有的连接
//foreach (var item in dic_Sockets.Values)
//{
// if (item != null)
//{
// item.Close();
// }
//} //Console.ReadKey();
}
public static void send(string key)
{ //string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort; var socket = dic_Sockets[key];
if (socket.IsAvailable == true)
{
socket.Send("服务器消息:" + DateTime.Now.ToString());
}
}
}

我遇到的问题

问题1:

我们可能遇到这个:

server.Certificate = new X509Certificate2(@"D:\ssl\www\cert.pfx", "214867098930248");

对于这个来说,我们需要去摆在信息,一个是X509Certificate2的第一个参数,一个是和第二个参数,第一个是我们的证书,第二个是我们的证书密码,是的,如果不正确的话,可能本地可以访问但是到了服务器的外面客户访问的时候是不可以的,因为证书不匹配,或者说由于开启了权限,但是我们的

用户是不会去为我们做这些操作的。

第二个我使用的是iis,需要配置一个。

iis 找到部署的站点应用连接池,右键高级设置,找到“加载用户配置文件”改为true。window service2008 默认为false的。

这样就解决了找不到文件路径的问题了。

前端代码

 <!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>WebSocket测试</title>
<style>
.div1
{
height:88px;
width:173px;
border:1px solid blue;
margin:auto;
}
h4
{
margin:auto;
}
</style>
<script>
var webSocket = {};
//创建websockt
function CreateWebSocket() {
webSocket = new WebSocket("wss://www.51kanyisheng.com:30000");
webSocket.onopen = WebSokectOnOpen;
webSocket.onmessage = WebSocketOnMessage;
webSocket.onclose = WebSocketOnClose;
}; //建立连接事件
function WebSokectOnOpen() {
alert("已经打开连接!");
console.log(webSocket);
webSocket.Send("WebSocketCreate Success!");
}; //监听事件
function WebSocketOnMessage(event) {
//监听来自客户端的数据
alert(event.data);
}; function WebSocketOnClose() {
//监听来自客户端的数据
alert('和服务器断开连接');
}; //发送事件
function WebSocketSendMsg() {
//获取text中的值
var text = document.getElementById("Text1").value;
//发送到服务器
console.log(webSocket);
webSocket.send(text);
};
</script>
</head>
<body onload="CreateWebSocket()">
<div class="div1">
<h4>CSDN博客</h4>
<h4>By:LoveMiw</h4>
<input type="text" id="Text1" />
<input type="button" onclick="WebSocketSendMsg()" value="发送数据" />
</div>
</body>
</html>

websocket fleck demo的更多相关文章

  1. WebSocket C# Demo

    WebSocket 规范 WebSocket 协议本质上是一个基于 TCP 的协议.为了建立一个 WebSocket 连接,客户端浏览器首先要向服务器发起一个 HTTP 请求,这个请求和通常的 HTT ...

  2. Nodejs实现WebSocket通信demo

    一.创建websocket.js文件 步骤: 1.创建websocket.js文件,复制如下代码: 2.安装nodejs-websocket依赖: 3.该文件夹下命令行执行 node websocke ...

  3. 一个基于netty的websocket聊天demo

    这里,仅仅是一个demo,模拟客户基于浏览器咨询卖家问题的场景,但是,这里的demo中,卖家不是人,是基于netty的程序(我就叫你uglyRobot吧),自动回复了客户问的问题. 项目特点如下: 1 ...

  4. 我做的一个websocket的demo(php server)

    notice: 通过命令行执行php文件  如 php -q c:\path\server.php 通过本地web服务器访问 http://127.0.0.1/websocket/index.php即 ...

  5. 一个websocket的demo(php server)

    notice: 通过命令行执行php文件  如 php -q c:\path\server.php 通过本地web服务器访问 http://127.0.0.1/websocket/index.php即 ...

  6. Springboot websocket学习Demo

    使用的是springboot2.1.4版本 <parent> <groupId>org.springframework.boot</groupId> <art ...

  7. C# WebSocket Fleck 调用非托管C++ DLL 实现通信(使用stringbuilder接收)

     [DllImport(@"XXX.dll", CallingConvention = CallingConvention.StdCall)]public static exter ...

  8. 基于WindowsService的WebSocket编程Demo

    一.什么是WebSocket WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端.说了半天也就是说有了它 ...

  9. C# WebSocket Fleck 调用非托管C++ DLL 实现通信(使用char*接收)

    [DllImport(@"C:XXX.dll", CallingConvention = CallingConvention.StdCall)] unsafe public sta ...

  10. vue+websocket demo 实例

    vue+websocket demo: <!-- vue + websocket连接demo --> <template> <div class="" ...

随机推荐

  1. 你想要一个简单的 MQ 吗?(最简单的那种)

    FolkMQ 一个简单的消息中间件(全球最简单的那种,要比谁都简单!).追世间简单为何物,可叫我生死相许! 面向简单编程 1) 启动服务 docker run -p 18602:18602 -p 86 ...

  2. YAML 语法简介与 C# 操作示例

    〇.简介 YAML(Yet Another Markup Language)另一种标记语言. YAML 是一种较为人性化的数据序列化语言,可以配合目前大多数编程语言使用.YAML 的语法比较简洁直观, ...

  3. import.meta.globEager('./src/components/**/*.vue'); 遍历文件

    main.js const importAll = (modules) => { Object.keys(modules).forEach((key) => { const compone ...

  4. vetur 和 volar 不要一起装 - vscode插件 已解决

    vetur 和 volar 不要一起装 - vscode插件 会有各种稀奇古怪的问题. 解决方案 利用 vscode 工作区 新建工作区 然后全局 将 volar 禁用工作区,起一个新的vue3项目, ...

  5. Java求解汉诺塔

    汉诺塔 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗 ...

  6. Android组件化开发实践和案例分享

    目录介绍 1.为什么要组件化 1.1 为什么要组件化 1.2 现阶段遇到的问题 2.组件化的概念 2.1 什么是组件化 2.2 区分模块化与组件化 2.3 组件化优势好处 2.4 区分组件化和插件化 ...

  7. 三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析

    三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析 三维模型的轻量化压缩是一项技术挑战,特别是在处理复杂的3DTile格式时.下面列举了一些处理过程中可能遇到的常见问题以及相应的处理方法: ...

  8. 记录--使用Canvas绘制一个验证码组件

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 使用Canvas绘制一个验证码组件 前言 验证码,这一日常伴随我们的要素,是我们在线交互的重要安全保障.你的手机短信里是否被它占据半壁江山 ...

  9. 记录--浏览器渲染15M文本导致崩溃怎么办

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近,我刚刚完成了一个阅读器的txt文件阅读功能,但在处理大文件时,遇到了文本内容过多导致浏览器崩溃的问题. 一般情况下,没有任何样式渲染 ...

  10. DevOps迈向标准化,平台工程让开发运维更轻松

    在近一代人的时间里,DevOps 在软件开发和运维领域占据了主导地位.这是一套开发人员都离不开的技能和方法.Pearl Zhu 在 "The Digital Master" 一书中 ...