C#版Websocket实例
C#版Websocket实例
Demo地址:www.awbeci.xyz
websocket有java、nodejs、python,Php等等版本,我使用的是C#版本,服务器端是Fleck,github地址:https://github.com/statianzo/Fleck
这篇博客就是引用上面的一个例子教你如何使用客户端和服务器端来使用websocket的,对于英文还不错的同学,直接看上面 的源代码就可以了,下面开始讲解如何使用:
在说之前我们先来看看哪些浏览器支持websocket:
WebSocket客户端支持
| 浏览器 | 支持情况 | 
|---|---|
| Chrome | Chrome version 4+支持 | 
| Firefox | Firefox version 5+支持 | 
| IE | IE version 10+支持 | 
| Safari | IOS 5+支持 | 
| Android Brower | Android 4.5+支持 | 
WebSocket 服务端支持
| 厂商 | 应用服务器 | 备注 | 
|---|---|---|
| IBM | WebSphere | WebSphere 8.0 以上版本支持,7.X 之前版本结合 MQTT 支持类似的 HTTP 长连接 | 
| 甲骨文 | WebLogic | WebLogic 12c 支持,11g 及 10g 版本通过 HTTP Publish 支持类似的 HTTP 长连接 | 
| 微软 | IIS | IIS 7.0+支持 | 
| Apache | Tomcat | Tomcat 7.0.5+支持,7.0.2X 及 7.0.3X 通过自定义 API 支持 | 
| Jetty | Jetty 7.0+支持 | 
现在我们看看浏览器端如何实现:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>websocket client</title>
    <script type="text/javascript">
        var start = function () {
            var inc = document.getElementById('incomming');
            var wsImpl = window.WebSocket || window.MozWebSocket;
            var form = document.getElementById('sendForm');
            var input = document.getElementById('sendText');
            inc.innerHTML += "connecting to server ..<br/>";
            // create a new websocket and connect
            window.ws = new wsImpl('ws://localhost:7181/');
            // when data is comming from the server, this metod is called
            ws.onmessage = function (evt) {
                inc.innerHTML += evt.data + '<br/>';
            };
            // when the connection is established, this method is called
            ws.onopen = function () {
                inc.innerHTML += '.. connection open<br/>';
            };
            // when the connection is closed, this method is called
            ws.onclose = function () {
                inc.innerHTML += '.. connection closed<br/>';
            }
            form.addEventListener('submit', function (e) {
                e.preventDefault();
                var val = input.value;
                ws.send(val);
                input.value = "";
            });
        }
        window.onload = start;
    </script>
</head>
<body>
    <form id="sendForm">
        <input id="sendText" placeholder="Text to send" />
    </form>
    <pre id="incomming"></pre>
</body>
</html>

服务器端我使用的是C#的控制台程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Fleck;
namespace TopoWebSocket
{
    class Program
    {
        static void Main(string[] args)
        {
            FleckLog.Level = LogLevel.Debug;
            var allSockets = new List<IWebSocketConnection>();
            var server = new WebSocketServer("ws://0.0.0.0:7181");
            server.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    Console.WriteLine("Open!");
                    allSockets.Add(socket);
                };
                socket.OnClose = () =>
                {
                    Console.WriteLine("Close!");
                    allSockets.Remove(socket);
                };
                socket.OnMessage = message =>
                {
                    Console.WriteLine(message);
                    allSockets.ToList().ForEach(s => s.Send("Echo: " + message));
                };
            });
            var input = Console.ReadLine();
            while (input != "exit")
            {
                foreach (var socket in allSockets.ToList())
                {
                    socket.Send(input);
                }
                input = Console.ReadLine();
            }
        }
    }
}

注意要引用:using Fleck;这个在上面的链接里面已经提供了。代码都写好后,我们来运行下服务器端吧,客户端也可以,总之两个都运行好:如图:

现在你可以客户端向服务器端发送消息了,我们试试,输入你好世界:

然后我们再在服务器端发送消息给浏览器试试,如,HelloWorld

也成功了,呵呵,是不是很神奇,现在可以添加自己 的业务逻辑在里面了,是不是 觉得前后台通信变得简单了。
总结:
1、这个例子不是我写的,我只不过在github上拿过来给你们介绍,你们可以通过上面的例子fork下源代码,自己看看分析分析别人是怎么用的
2、如果有问题可以加群问我:464696550
3、参考资料:http://www.ibm.com/developerworks/cn/java/j-lo-WebSocket/
C#版Websocket实例的更多相关文章
- Websocket实例
		C#版Websocket实例 websocket有java.nodejs.python,Php等等版本,我使用的是C#版本,服务器端是Fleck,github地址:https://github.com ... 
- 如何做系列(4)-微博URL短网址生成算法原理(java版、php版实现实例)
		短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代 ... 
- python 版websocket实现
		ubuntu下python2.76 windows python 2.79, chrome37 firefox35通过 代码是在别人(cddn有人提问)基础上改的, 主要改动了parsedata和se ... 
- WebSocket入门教程(五)-- WebSocket实例:简单多人聊天室
		from:https://blog.csdn.net/u010136741/article/details/51612594 [总目录] WebSocket入门教程--大纲 [实例简介] ... 
- websocket实例(显示文件导入处理进度)
		大批量数据导入时,需要即时显示对文件的处理进度.考虑ajax轮询太浪费资源,使用websocket实现. 项目使用Spring MVC(3.1),与websocket结合要求版本4.0以上.所以没有使 ... 
- Unix环境高级编程第三版中实例代码如何在自己的linux上运行的问题
		学习Linux已经有2个月了,最近被期末考试把进度耽误了,前几天把Unix环境高级编程看了两章,感觉对Linux的整体有了一些思路,今天尝试着对第一章涉及到的一个简单的交互式shell编译运行一下,结 ... 
- Spring+Netty+WebSocket实例
		比较贴近生产,详见注释 一.pom.xml 具体太长,详见源码 </dependency> <dependency> <groupId>io.netty</g ... 
- Django-channels 实现WebSocket实例
		引入 先安装三个模块 pip install channels pip install channels_redis pip install pywin32 创建一个Django项目和一个app 项目 ... 
- html5 websocket 示例,websocket在线聊天,php websocket实例
		WebSocket在线测试工具 http://ws.douqq.com/ 1.连接格式为 ws://IP/域名:端口(示例ws://119.29.3.36:5354) 2.对于内网的测试环境,只需填入 ... 
随机推荐
- python和yum同时卸载后的安装方法
			centos 7如果卸载了yum和python之后恢复的办法(该方法已经测试). 1. 安装python. python-libs-2.7.5-34.el7.x86_64.rpm python-2.7 ... 
- 关于go get安装git golang项目时报错的处理办法
			关于go get安装git golang项目时报错的处理办法 使用go get安装github上的项目时一般来说,不可避免会出错.各种错误的处理办法: 必须条件: 1.安装git并配置环境变量.下载地 ... 
- ACM-ICPC 2018 南京赛区网络预赛 L 【分层图最短路】
			<题目链接> 题目大意: 有N个城市,这些城市之间有M条有向边,每条边有权值,能够选择K条边 边权置为0,求1到N的最短距离. 解题分析: 分层图最短路模板题,将该图看成 K+1 层图,然 ... 
- 躲不掉的 lambda 表达式
			lambda 表达式是 Java8 的新特性,虽说都发布很久了,但是不到万不得已是肯定不会研究这个的,现在就是那不得不学习的时候了. 本文主要说一下什么 lambda 表达式.Java 中为什么要有 ... 
- switch反汇编
			以下总结为debug模式 
- Python itertools模块详解
			这货很强大, 必须掌握 文档 链接 http://docs.python.org/2/library/itertools.html pymotw 链接 http://pymotw.com/2/iter ... 
- C#中的集合之ArryList
			List泛型集合 集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一. 为什么要用泛型集合? 在C# 2.0之前,主要可以通过两种方式实现集合: a.使用ArrayList 直接 ... 
- 初窥Java--2(下载Eclipse,安装tomcat插件)
			一.软件下载 Eclipse3.6 IDE for Java EE Developers: 下载地址:http://eclipse.org/downloads/ Tomcat Eclipse Plug ... 
- JavaScript踩坑
			1 //这样做会抛出错误 alert(ttt); //这样做不会,只是会弹出undefine而已 alert(window.ttt); 当然可以try catch如此捕获异常 try { //这样做会 ... 
- Tarjan求强连通分量 缩点
			强连通分量的定义: 在一张有向图中,如果两个点u,v之间能相互到达则称这两个点u,v是强连通的,在这个基础上如果有向图G中的任意两个顶点都强连通,那么称图G是一个强连通图.有向非强连通图的极大强连通子 ... 
