asp.net网站作为websocket服务端的应用该如何写

news/2024/5/13 17:41:56/文章来源:https://blog.csdn.net/qq_45534098/article/details/105609674

  最近被websocket的一个问题困扰了很久,有一个需求是在web网站中搭建websocket服务。客户端通过网页与服务器建立连接,然后服务器根据ip给客户端网页发送信息。

  其实,这个需求并不难,只是刚开始对websocket的内容不太了解。上网搜索了一下,有通过asp.net core 实现的、有通过一般处理程序ashx文件来实现的,这些方法不能满足我当前网站的需求。我自己通过SignalR也实现了此功能,而且使用signalR实现起来会更简单。但是我的需求是客户端不是我编写,而且是一个手持机,只给我留了一个填写websocket服务器地址的地方,所以我没有办法通过signalR封装的js去调用后台的websocket服务。如果你的需求不像我这么苛刻,你完全可以通过signalR实现,而且更加简单。

  最后,通过fleck第三方库实现了我想要的功能。下面详细说一下我的实现过程。

  1.下载fleck第三方库,我是通过Git下载的,源码下载

   点击页面中的Clone or download -> Download ZIP,下载

   

  下载完之后,可以查看里面的文档,具体的实现可以查看代码。

 

  2.将fleck加入到自己的项目中,并对fleck进行引用。

  

 

  3.编写我们自己的websocket类

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using Fleck;namespace FAW.Common
{public class WsContext{//客户端url以及其对应的Socket对象字典static IDictionary<string, IWebSocketConnection> dic_Sockets = new Dictionary<string, IWebSocketConnection>();public static void StartUpWs(){String ipValue = ConfigurationManager.AppSettings["WebsocketAddress"];//创建//WebSocketServer server = new WebSocketServer("ws://127.0.0.1:8819/terver");//监听所有的的地址WebSocketServer server = new WebSocketServer(ipValue);//监听的地址写在配置文件里//出错后进行重启server.RestartAfterListenError = true;//开始监听server.Start(socket =>{socket.OnOpen = () =>   //连接建立事件
                {//获取客户端网页的urlstring clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;dic_Sockets.Add(clientUrl, socket);LogManager.WriteLog("服务器:和客户端网页:[" + 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);}LogManager.WriteLog("服务器:和客户端网页:[" + clientUrl + "]  断开WebSock连接!");};socket.OnMessage = message =>  //接受客户端网页消息事件
                {string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;LogManager.WriteLog("服务器:【收到】来客户端网页:" + clientUrl + "的信息:\n" + message);};});}public static void SendMsg(String ipAddress, String jsonString){if (String.IsNullOrEmpty(jsonString)){//写日志LogManager.WriteLog("中止发送,向客户端发送信息为空。" );return;}foreach (var item in dic_Sockets.Values){if (item.IsAvailable == true && item.ConnectionInfo.ClientIpAddress == ipAddress){LogManager.WriteLog("服务器: 向客户端发送信息为 " + jsonString);item.Send(jsonString);}}}}
}

 

  这段代码呢,StartUpWs函数主要是建立一个websocket服务端,SendMsg函数是负责提供外部调用向指定的客户端发送内容的工作。

            try{String pdaIP = cameraLogic.QueryPDAIPByIP(cameraIP);LogManager.WriteLog("获取摄像头对应的手机机IP:" + pdaIP);WsContext.SendMsg(pdaIP, sendMessage);}catch (Exception ex){LogManager.WriteLog("手动抬杆websocket异常:" + ex.Message);}            

  这个代码片段就是在网站中调用SendMsg函数,给指定的客户端发送数据。

  注意:这里要提一点,如果websocket服务的端口要提供给外网访问的话,需要将端口加入到防火墙入站规则中,并且需要做一下内外网ip和端口的映射,否则外网想访问这个服务是不可以的。

  4.接下来我们就要将websocket添加到网站中,让它随着网站的启动而启动。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Routing;
using System.Web.Security;
using FAW.WEB;
using FAW.Common;namespace FAW.WEB
{public class Global : HttpApplication{void Application_Start(object sender, EventArgs e){// 在应用程序启动时运行的代码
            AuthConfig.RegisterOpenAuth();//建立websocket服务器
            WsContext.StartUpWs();}}
}

   这样就可以了。

  5.测试websocket服务是否可用的话,可以通过websocket在线测试的功能。这个只要百度一下,你就全知道了,很简单,这里不再介绍。

  总结:其实websocket的操作真的不难,就是普通的http请求得到了一次升级后,建立了一个全双工的通道,可以相互发送信息。只是我在网上并没有找到asp.net网站作为服务端的例子,其实需要做的只有两步:1.建立一个websocket的服务端;2.将websocket的服务端加入到Global文件中,随程序一起启动。我把这个分享出来,希望可以帮助更多的人。

   

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_732109.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java web 社区_我的第一个javaweb----模仿社区网站(二)

项目分层在写后台之前我给分了四层&#xff0c;每一层负责不同的功能&#xff0c;如图. 前端页面层&#xff1a;也就是浏览器展示给人看的&#xff0c;直接与人交互的界面. servlet层&#xff1a;受理前端页面发来的数据&#xff0c;由它接受前端发来的请求(request)做出不同的…

老榕智能建站软件_教你把网站建设得更好上线了智能建站系统

对于不懂技术、没有太多资金的个人和中小企业来说&#xff0c;要想生成自己的网站&#xff0c;就需要用到智能建站系统。智能建站比较简单&#xff0c;小白也能很快上手&#xff0c;不过这并不意味着你就可以随随便便搭建了。实际上&#xff0c;若想顺利建设出一个有用的网站&a…

vba获取正在运行网站的源码_VBA教程连载——第三节:如何运行宏

宏的运行方式有以下几种&#xff1a;第一种&#xff0c;自我录制运行打开开发工具-自己去录制一个宏&#xff0c;然后给它命名&#xff0c;录制完成后运行。至于具体怎么录制&#xff0c;我们下节课再细谈。注意&#xff1a;内置宏的表格&#xff0c;一般是没法直接保存的&…

html seo 优化,SEO优化中常见的四种html标签作用

对于SEOer来说&#xff0c;在HTML代码中&#xff0c;使用一些标签&#xff0c;更利于搜索引擎蜘蛛的读取&#xff0c;适当布局一些优化标签&#xff0c;可能会有意想不到的结果。下面就列举几个标签的妙用。1.标题标签。在网页html代码中 h1 标签是定义最大的标题。在整个页面中…

Nginx学习四:静态网站部署

文章目录第一步&#xff1a;通过Xftp将ace-master到linux服务器/opt/static目录下&#xff0c;为了演示方便&#xff0c;将名字改为ace第二步&#xff1a;修改nginx.conf配置文件在server中第三步&#xff1a;重启nginx服务器第四步&#xff1a;成功访问测试&#xff1a;通过ht…

php网站怎么做集群,如何构建一个网站集群 - 简庆旺个人博客|PHP教程|PHP学习|Python学习|Python教程|Seo学习|Seo教程...

网站业务大了&#xff0c;可能就需要一个集群&#xff0c;来保障业务的稳定性&#xff0c;我根据自己的学习工作经验&#xff0c;做了下总结。一&#xff1a;DNS负载均衡dns轮询&#xff0c;自动把流量分散到不同的服务器&#xff0c;避免单个服务器挂了。比如用的dnspod&#…

提高网站转化率——页面停留时间与网站停留时间

一、页面停留时间与网站停留时间是如何计算出来的&#xff1f; 假设用户访问了网站的主页&#xff08;Home&#xff09;。分析工具将这个访问者标记为一个Visit&#xff0c;接着这个访问者又浏览了另外两个页面&#xff08;Page2和Page3&#xff09;&#xff0c;然后他离开了你…

4种黑帽SEO手法

1、斗篷法&#xff08;Cloaking&#xff09; 为什么叫斗篷法呢&#xff1f;可能是因为只能看到斗篷&#xff0c;而不能看到真面目的意思吧&#xff01; 斗篷法指站长将一个网页用两个不同版本的页面&#xff0c;一个版本给搜索引擎看&#xff0c;一个版本给用户浏览。而搜索引…

数据采集与网站统计实现全过程

做网站统计首先要有数据&#xff0c;数据从何而来&#xff1f;这需要网站要记录客户所访问的轨迹&#xff0c;记录用户访问每个页面的流向&#xff0c;给网站加过百度统计与cnzz的站长们估计都清楚&#xff0c;要想对某个页面进行统计&#xff0c;就要在该页面上加上统计代码&a…

php网站优化简书,记一次PHP优化案例

Lnmp网站服务器架构,其实就是Linuxnginxmysqlphp架构体系eg&#xff1a;后台访问很慢&#xff0c;而且有时候出现502错误。一、案例分析。我们可以想到&#xff0c;既然是访问缓慢&#xff0c;有时候直接访问不了&#xff0c;以前是没问题的&#xff0c;到现在就突然出现了问题…

网站漏洞扫描工具_网站目录扫描工具

目录御剑dirbusterWebdirscan网站后台扫描工具都是利用目录字典进行爆破扫描&#xff0c;字典越多&#xff0c;扫描到的结果也越多。常用的网站后台扫描工具御剑、dirbuster和Webdirscan&#xff0c;不管哪个工具&#xff0c;要想扫描到更多的东西&#xff0c;都必须要有一个强…

匀速建站 华为云_紫虎5G云网站:5G回转,不止是快捷建站,新兴的SEO模式也在崛起...

最近&#xff0c;5G时代的推动正在如火如荼进行中&#xff0c;今天一大早就有爆料说&#xff0c;继去年年底推出面向企业的5G商用网络后&#xff0c;韩国三大电信运营商4月5日起正式开始为大众办理5G手机入网手续&#xff0c;韩国由此成为全球率先对普通用户开通5G商用网络的国…

python 网页设计_GitHub - leiphp/Django-myblog: Django入门与实践--Python制作个人博客网站,一个Python的高级Web框架,功能非常强大。...

Django-myblog Django入门与实践--Python制作个人博客网站&#xff0c;一个Python的高级Web框架&#xff0c;功能非常强大&#xff0c;下面是项目预览&#xff0c;随便找了一套前端模板&#xff0c;目前只做了主页和文章页的界面。 项目预览开发环境 1.Python 2.Django 3.编辑器…

网站打不开显示access denied_果汁排行榜-一个宝藏网站

果汁排行榜一个宝藏网站&#xff0c;把互联网上的各大热搜榜&#xff0c;排行榜汇聚在了一网站。可以查阅搜索实时热点&#xff0c;影视&#xff0c;音乐&#xff0c;摄影&#xff0c;财富&#xff0c;游戏等各领域热门排行榜单。果汁排行榜 [http://guozhivip.com/rank/]

html站点根目录怎么改,通过重定向把子目录设置为网站根目录

摘要&#xff1a;如果想在一个项目内对于不同的文件夹使用不同的域名来访问&#xff0c;我们需要把这些文件夹单独设置成根目录并绑定域名&#xff0c;但对于虚拟服务器用户来说&#xff0c;这并不容易实现&#xff0c;因为一般的虚拟服务器是没有这样的功能的&#xff0c;但我…

前端性能优化(七)-页面性能优化之优化清单——编码、解码形成DOM树的过程 优化关键渲染路径 JS性能在线测试网站 性能优化-参考资料

前端性能优化&#xff08;七&#xff09;-页面性能优化之优化清单——编码、解码形成DOM树的过程 & 优化关键渲染路径 & JS性能在线测试网站 & 性能优化-参考资料 编码、解码形成DOM树的过程 浏览器从网络或硬盘中获得HTML字节数据后会经过一个流程将字节解析为D…

怎样对java网站进行简单修改_javaweb简单的增删改查之“加”

我相信对每一个初学者来说能有一个好的教程真的帮助非常大&#xff0c;虽然我也只是一个初学者&#xff0c;我相信我所学到的转化为自己的语言对大家会有帮助1.连接数据库public class Databass {public static String db_url "jdbc:mysql://localhost:3306/blog?charac…

PHP Web应用开发 -用PHP实现简单的个人博客网站

文章目录题目一、项目简介二、需求分析三.总体设计四. 详细设计五、运行测试六、 总结题目 题目&#xff1a;用PHP实现一个贴吧的网站 一、项目简介 能够实现用户注册登录发帖会贴的功能。 二、需求分析 &#xff08;1&#xff09;统一友好的操作界面。具有良好的用户体验…

JavaWeb-网站在线用户信息、网站访问量以及管理踢出用户实例

转载请注明出处&#xff1a; http://blog.csdn.net/qq_26525215 本文源自【大学之旅_谙忆的博客】 这个稍微比上个版本做得完善了一点&#xff0c;用了JavaBean来封装用户信息&#xff0c;添加了一个管理踢用户的功能。 上一个的用户访问量是通过监听request来统计的&#xff…

网络基础(三)02-网络的基础概念——DNS服务器之hosts文件配置 网站访问流程之三次握手 BS架构-浏览器访问、CS架构-安装软件客户端 静态网站和动态网站-数据是否动态

网络基础&#xff08;三&#xff09;02-网络的基础概念——DNS服务器之hosts文件配置 & 网站访问流程之三次握手 & B/S架构-浏览器访问、C/S架构-安装软件客户端 & 静态网站和动态网站-数据是否动态 4.5 DNS DNS: Domain Name System 域名系统。在DNS服务器中保存…