WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

今天在这里我会用C#搭建WebSocket服务端演示WebSocket的通信过程

一、WebSocket中的事件、属性和方法

  属性:

  Socket.readyState                   只读属性 readyState 表示连接状态,可以是以下值:
- 表示连接尚未建立。
- 表示连接已建立,可以进行通信。
- 表示连接正在进行关闭。
- 表示连接已经关闭或者连接不能打开。
  Socket.bufferedAmount         只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数

  事件:

  事件             事件处理程序               描述
  open     Socket.onopen 连接建立时触发
  message    Socket.onmessage    客户端接收服务端数据时触发
  error    Socket.onerror 通信发生错误时触发
  close    Socket.onclose 连接关闭时触发

  方法:

  Socket.send()                     使用连接发送数据
  Socket.close() 关闭连接

二、有了大概的了解接下来就开始实现这么一个实例

  1.客户端

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body >
<div style="margin-left: 650px;">
<form id="Form">
<input type="input" name="" id="SendInfo" value="" />
<button type="submit">提交</button>
</form> <div id="hello" style="border: dashed 1px black;height: 500px;width: 500px;margin-top: 10px;"> </div>
</div> </body>
<script type="text/javascript">
var test=function(){ var print=document.getElementById('hello');
var form = document.getElementById('Form');
var input = document.getElementById('SendInfo');
print.innerHTML += "connecting to server ..<br/>";
window.ws = new WebSocket('ws://localhost:9898/'); //监听webscoket服务端口 //监听消息状态
ws.onmessage=function(eve){
print.innerHTML+=eve.data+'<br/>'
} //监听链接状态
ws.onopen=function(){
print.innerHTML+='connection open <br/>'
} //监听关闭状态
ws.onclose = function () {
print.innerHTML += 'connection closed<br/>';
} //向服务器端发送消息
form.addEventListener('submit',function(e){
e.preventDefault();
var val="客户端:"+input.value;
ws.send(val);
input.value="";
}) } window.onload=test();
</script>
</html>

  2.服务端创建一个C#控制台程序

using Fleck;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace WebScoket
{
class Program
{
static void Main(string[] args)
{
var allScokets = new List<IWebSocketConnection>();
var server = new WebSocketServer("ws://127.0.0.1:9898"); //创建webscoket服务端实例
server.Start(scoket=> {
scoket.OnOpen = () =>                   
{
Console.WriteLine("Open");
allScokets.Add(scoket);
};
scoket.OnClose = () =>
{
Console.WriteLine("Close");
allScokets.Remove(scoket);
};
scoket.OnMessage =message => {
Console.WriteLine(message);
allScokets.ToList().ForEach(s=>s.Send(message));
};
}); var input = Console.ReadLine();
while (input != "exit")
{
foreach (var socket in allScokets.ToList())
{
socket.Send("服务端:"+input);
}
input = Console.ReadLine();
} }
}
}

  3.运行效果

 

  

  

用C#搭建WebSocket的更多相关文章

  1. 使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  2. 【C#】MVC项目中搭建WebSocket服务器

    前言 因为项目需要,前端页面中需要不断向后台请求获取一个及一个以上的状态值.最初的方案是为每个状态值请求都建立一个定时器循环定时发起Ajax请求,结果显而 易见.在HTTP1.1协议中,同一客户端浏览 ...

  3. (转)使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  4. 使用Node.js+Socket.IO搭建WebSocket实时应用【转载】

    原文:http://www.jianshu.com/p/d9b1273a93fd Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新 ...

  5. 【Netty】(7)---搭建websocket服务器

    [Netty](7)---搭建websocket服务器 说明:本篇博客是基于学习某网有关视频教学. 目的:创建一个websocket服务器,获取客户端传来的数据,同时向客户端发送数据 一.服务端 1. ...

  6. 搭建websocket消息推送服务,必须要考虑的几个问题

    近年,不论是正在快速增长的直播,远程教育以及IM聊天场景,还是在常规企业级系统中用到的系统提醒,对websocket的需求越来越大,对websocket的要求也越来越高.从早期对websocket的应 ...

  7. Netty 搭建 WebSocket 服务端

    一.编码器.解码器 ... ... @Autowired private HttpRequestHandler httpRequestHandler; @Autowired private TextW ...

  8. netty系列之:使用netty搭建websocket服务器

    目录 简介 netty中的websocket websocket的版本 FrameDecoder和FrameEncoder WebSocketServerHandshaker WebSocketFra ...

  9. 在IIS上搭建WebSocket服务器(一)

    一.搭建环境 1.System.Web.WebSockets需搭建在Windows8及Server2012以上系统的上. 2.在Windows8及Server2012以上系统的上安装IIS和WebSo ...

随机推荐

  1. 使用fio命令查看磁盘iops

    具体命令: fio -filename=./localhost.2019-05-08.log -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psy ...

  2. docker部署zabbix

    我相信大家都已经会再物理机上跑zabbix并且监控了,那么有没有想过在docker中跑zabbix?下面咱们来看看如何在docker中搭建zabbix并且监控 部署环境 2台物理机机器: zabbix ...

  3. Nginx七层负载均衡的几种调度算法

      Nginx是一款轻量级的高性能web服务器,同时也是一款非常优秀的负载均衡器和反向代理服务器.由于支持强大的正则匹配规则.动静分离.URLrewrite功能及安装配置简单且对网络稳定性依赖非常小等 ...

  4. django rest framework 序列化组件总结

    序列化组件总结 一. 序列化组件本质上为了实现前后端分离,而进行json序列化的一个组件形式,极大方便了解析数据的作用 二. 所有序列化是基于APIView 解析器实现的,通过内部的多继承关系方便实现 ...

  5. CentOS7.5 系统最小化安装与初始化配置

    CentOS7.5 系统最小化安装与初始化配置 1.安装标准化的系统 1.1.系统安装期间的语言 选择:中文-简体中文,安装完成也会默认支持中文输出,便于管理 1.2.时区选择 亚洲上海,CST时区( ...

  6. emacs第一天

    emacsbinw64.sourceforge.net  windows的emacs下载地方(绿色软件) 学习快速入门 C-h t 快速入门的帮助文档  C-h 是prefix key 光标移动快捷键 ...

  7. 使用uwsgi部署项目?

    方式1: 这种方式虽然比较方便,但是启动操作比较繁琐,每次都不能关闭窗口 安装uwsgi:pip3 install uwsgi 上传项目,部署web app 创建数据库,同步数据 运行django项目 ...

  8. idea输出文件夹没有jsp页面

    目录 idea输出文件夹没有jsp页面 问题描述 解决办法 idea输出文件夹没有jsp页面 问题描述 开始创建没有使用web的模板, 自己创建tomcat等配置, 后来启动发现没有index.jsp ...

  9. Spring Boot 《一》开发一个“HelloWorld”的 web 应用

    一,Spring Boot 介绍 Spring Boot不是一个新的框架,默认配置了多种框架使用方式,使用SpringBoot很容易创建一个独立运行(运行jar,内嵌Servlet).准生产级别的基于 ...

  10. [技术博客] 微信小程序的formid获取

    微信小程序的formid获取 formId的触发 微信小程序可以通过收集用户的formid,获取formid给用户主动推送微信消息.获取formid有两个途径,一个是触发一次表单提交,或者触发一次支付 ...