1、WebSocket
WebSocket是HTML5出的東西(協議),也就是說HTTP協議沒有變化,或者說不要緊,但HTTP是不支持持久鏈接的(長鏈接,循環鏈接的不算)javascript
首先HTTP有1.1和1.0之說,也就是所謂的keep-alive,把多個HTTP請求合併爲一個,可是Websocket實際上是一個新協議,跟HTTP協議基本沒有關係,只是爲了兼容現有瀏覽器的握手規範而已,也就是說它是HTTP協議上的一種補充。WS和WSS協議相似於HTTP和HTTPS,容許使用安全和保密的通訊方案。html
回到目錄java
2、ASP.NET Core中的WebSocket
要在ASP.NET Core中使用WebSocket,要先引用Microsoft.AspNetCore.WebSockets.Server的NuGet Package包。git
下面咱們建立一個名爲WebSocketHandler.cs的類,內容以下:github
經過對HttpContext中的WebSockets.AcceptWebSocketAsync方法,接受WebSocket請求;並在EchoLoop函數中進行請求的處理。web
public class SocketHandler瀏覽器
{安全
public const int BufferSize = 4096;微信
WebSocket socket;app
SocketHandler(WebSocket socket)
{
this.socket = socket;
}
async Task EchoLoop()
{
var buffer = new byte[BufferSize];
var seg = new ArraySegment<byte>(buffer);
while (this.socket.State == WebSocketState.Open)
{
var incoming = await this.socket.ReceiveAsync(seg, CancellationToken.None);
var outgoing = new ArraySegment<byte>(buffer, 0, incoming.Count);
await this.socket.SendAsync(outgoing, WebSocketMessageType.Text, true, CancellationToken.None);
}
}
static async Task Acceptor(HttpContext hc, Func<Task> n)
{
if (!hc.WebSockets.IsWebSocketRequest)
return;
var socket = await hc.WebSockets.AcceptWebSocketAsync();
var h = new SocketHandler(socket);
await h.EchoLoop();
}
/// <summary>
/// branches the request pipeline for this SocketHandler usage
/// </summary>
/// <param name="app"></param>
public static void Map(IApplicationBuilder app)
{
app.UseWebSockets();
app.Use(SocketHandler.Acceptor);
}
}
這個類只處理了最簡單的客戶端發送信息並將原文返回客戶端。
接着就要作路由映射了:
app.UseStaticFiles();
app.Map("/ws", SocketHandler.Map);
要驗證並看到運行的結果,咱們還要建立一個Html。並在Html頁面裏面建立一個Div內容以下:
<div id="output"></div>
而且添加一個WebSocket的客戶端腳本:
<script language="javascript" type="text/javascript">
var socket;
var uri = "ws://" + window.location.host + "/ws";
var output;
var text = "test echo";
function write(s) {
var p = document.createElement("p");
p.innerHTML = s;
output.appendChild(p);
}
function doConnect() {
socket = new WebSocket(uri);
socket.onopen = function (e) { write("opened " + uri); doSend(); };
socket.onclose = function (e) { write("closed"); };
socket.onmessage = function (e) { write("Received: " + e.data); socket.close(); };
socket.onerror = function (e) { write("Error: " + e.data); };
}
function doSend() {
write("Sending: " + text);
socket.send(text);
}
function onInit() {
output = document.getElementById("output");
doConnect();
}
window.onload = onInit;
</script>
下面就能夠看到運行結果了:

這個例子能夠在以下Github中獲取到:https://github.com/zbrad/wsweb
原文地址: http://www.cnblogs.com/maxzhang1985/p/6208165.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
