热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于.netC#实现websocket前后端消息实时推送

一、准备环境IIS需支持websocket协议,同时需要配置进行如下配置websocket宿主配置完成。二、实现方法我采用两种方式进行测试:1、基于webapi作为服务端2、一般处


一、准备环境

IIS需支持websocket协议,同时需要配置进行如下配置


websocket 宿主配置完成。

二、实现方法

我采用两种方式进行测试:

1、基于webapi作为服务端

2、一般处理程序作为服务端

两种形式,实际都一样,只不过相对于客户端来说,请求路径和方式不同而已。

最主要的还是websoket组件部分,这里使用的是第三方的组件Fleck实现,有了这个组件很容易实现websocket服务创建了。如下:

using Fleck;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebSocketTest.DAL
{
public class TestSocket
{
private string msg = "默认信息";
public void socketServer() {
string serverIP = System.Configuration.ConfigurationManager.AppSettings["serverIP"];
var allSockets = new List();
var server = new WebSocketServer(serverIP);
server.Start(socket =>//服务开始
{
socket.OnOpen= () =>
{
Console.WriteLine("Open!");
allSockets.Add(socket);
};
socket.OnClose= () =>
{
Console.WriteLine("Close!");
allSockets.Remove(socket);
};
socket.OnMessage= message =>
{ //客户端交互的消息
System.Timers.Timer t = new System.Timers.Timer(1000);//实例化Timer类,设置间隔时间为10000毫秒;
t.Elapsed += new System.Timers.ElapsedEventHandler(theout);//到达时间的时候执行事件;
t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
allSockets.ToList().ForEach(s => s.Send("Echo: " + msg));
};
});
}
public void theout(object source, System.Timers.ElapsedEventArgs e)
{
msg = GetRandomString();
}
///


///生成随机字符串 --用于测试随机发送
///

///

目标字符串的长度
///

是否包含数字,1=包含,默认为包含
///

是否包含小写字母,1=包含,默认为包含
///

是否包含大写字母,1=包含,默认为包含
///

是否包含特殊字符,1=包含,默认为不包含
///

要包含的自定义字符,直接输入要包含的字符列表
///指定长度的随机字符串
public static string GetRandomString()
{
byte[] b = new byte[4];
new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b);
Random r = new Random(BitConverter.ToInt32(b, 0));
string s = null, str ="";
str += "我们都有一个家abcdefghijklmnopqrstuvwxyz123456789";
for (int i = 0; i <15; i++)
{
s += str.Substring(r.Next(0, str.Length - 1), 1);
}
return s;
}
}
}

配置文件部分








webapi代码如下

[RoutePrefix("api/server")]
public class ValuesController : ApiController
{
[HttpGet,Route("getmsg")]
public void getmsg() {
TestSocket t = new TestSocket();//调用websocket工具类
t.socketServer();
}
}

一般处理程序代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WebSocketTest.DAL;
namespace WebSocketTest
{
///


/// test 的摘要说明
///

public class test : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
TestSocket t = new TestSocket();
t.socketServer();
}
public bool IsReusable
{
get
{
return false;
}
}
}
}

前端页面部分







.net项目WebSocket


测试说明


文本框中数据数据,点击‘发送测试’,文本框中的数据会发送到后台websocket,后台接受到之后,会再推送数据到前端,展示在下方;点击关闭连接,可以关闭该websocket;可以跟踪代码,了解具体的流程;代码上有详细注解













备注:该页面的内容我是用的别人写的,自己没写,目的看看效果,由衷感谢那位朋友!


效果展示

随机打印出一大堆随机字符串,测试通过。



推荐阅读
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 译文:如何使用SocketAsyncEventArgs类(How to use the SocketAsyncEventArgs class)
    转载自:http:blog.csdn.nethulihuiarticledetails3244520原文:HowtousetheSocketAsyncE ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 一、前言2012年毕业,2016年转行,没有一个体面的工作,机缘巧合之下,来到了大连,Java培训,一个全新的领域,迷茫、困惑、漫无目的的努力,转行真的被歧视,真的不行吗?我命由我 ... [详细]
  • Istio是一个用来连接、管理和保护微服务的开放平台。Istio提供一种简单的方式来为已部署的服务建 ... [详细]
  • Django3 使用 WebSocket 实现 WebShell
    △点击上方“Python猫”关注,回复“1”领取电子书剧照:《眷思量》作者:从零开始的程序员生活来源:https:www.c ... [详细]
  • 为了让用户体验更好,页面前端往往是通过ajax来进行数据处理;由于浏览器的设计原因每个域名下的连接有 ... [详细]
  • webui之常用js操作(webui界面是什么)
    本文目录一览:1、web前端开发需要掌握的几个必备技术 ... [详细]
author-avatar
jiazi---
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有