c#服务端使用GoEasy实现websocket,向客户端推送消息

c#服务端使用GoEasy实现websocket,向客户端推送消息

WebSocket出现之前,Web端为了实现即时通讯,所用的技术都是Ajax轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽。

而比较新的技术去做轮询的效果是Comet , 但这种技术虽然可达到全双工通信,依然需要发出请求。

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

目前GoEasy提供完整的websocket前后端解决方案,简单的几行代码集成,即可快速搭建您的专属websocket服务。

GoEasy提供了灵活多样的服务端语言使用的Restful API接口,我们可以通过GoEasy提供的Rest API灵活、高效的推送消息 。

下面我们来看看如何在C#中使用GoEasy来完成websocket服务的搭建:

1、C# websocket服务端实现:

以下是GoEasy开发文档中提供的C#实现websocket的演示代码。通过简单的调用Rest API接口,我们可以将想要推送的消息推送到任何客户端。

string postDataStr = "appkey=BC-xxxxxxxxx&channel=demo_channel&content=Hello";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http(s)://<REST Host>/publish");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
Stream myRequestStream = request.GetRequestStream();
byte[] data = Encoding.UTF8.GetBytes(postDataStr);
myRequestStream.Write(data, 0, data.Length);

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();

2、客户端接收消息:

我们假设要接收消息的客户端使用的是html,那么要在html中接收消息,使用以下代码即可:

<!--[if lte IE 8]>//如果需要支持低版本的IE8及以下
<script  type="text/javascript" src="https://cdn.goeasy.io/json2.js"></script>
<![endif]-->

<script type="text/javascript" src="https://cdn.goeasy.io/goeasy-1.0.3.js"></script>
<script>
var goEasy = new GoEasy({
    host:'hangzhou.goeasy.io', //应用所在的区域地址: 【hangzhou.goeasy.io |singapore.goeasy.io】
    appkey: "my_appkey", //替换为您的应用appkey
});
//GoEasy-OTP可以对appkey进行有效保护,详情请参考​ ​ 
//如果需要使用HTTPS/WSS,请在连接初始化GoEasy对象的时候传入参数forceTLS,并设置为true。
</script>
<script>
goEasy.subscribe({
    channel: "my_channel", //替换为您自己的channel
    onMessage: function (message) {
        console.log("Channel:" + message.channel + " content:" + message.content);
    }
});
</script>

另外GoEasy还支持更多的前端技术框架比如小程序、react、vue、uniapp等。同时还是支持php、java、python等服务端语言。 更多关于Rest API的使用技巧,可以来这里看看:GoEasy服务器发送消息

Comments are closed.