在 C# 中使用 Socket.IO

Posted

技术标签:

【中文标题】在 C# 中使用 Socket.IO【英文标题】:Using Socket.IO in C# 【发布时间】:2015-10-08 12:32:28 【问题描述】:

我正在尝试从 Wikimedia 站点读取 Socket.IO 流。有各种语言的示例代码,但我需要让它在 C# 中工作

源码链接在这里:

https://wikitech.wikimedia.org/wiki/RCStream

这里是 javascript 实现。

// Requires socket.io-client 0.9.x:
// browser code can load a minified Socket.IO JavaScript library;
// standalone code can install via 'npm install socket.io-client@0.9.1'.

var io = require( 'socket.io-client' );
var socket = io.connect( 'stream.wikimedia.org/rc' );

socket.on( 'connect', function () 
     socket.emit( 'subscribe', 'commons.wikimedia.org' );
 );

socket.on( 'change', function ( data ) 
    console.log( data.title );
 );

我已经尝试了大约 3 个 .NET 版本的 socket.io 并且无法获得连接。我最接近的是收到“无效端点”错误消息。我认为问题的一部分是我使用的一些库(来自 Nuget 和其他地方),其中不同版本的 socket.io 0.9.x

我希望这里有人可以帮助我找到一种在 C# 中工作的方法。我花了大约4个小时无济于事。谢谢。

【问题讨论】:

如果您正在尝试使用 .NET 实现实时服务器/客户端通信,您可能需要查看SignalR。 【参考方案1】:

您可以查看 Socket.IO 的 C# 客户端,例如 SocketIoClientDotNet 或 SocketIO4net,这样您的代码就会像在 JS 中一样简单。

var socket = IO.Socket("http://stream.wikimedia.org/rc");
socket.On(Socket.EVENT_CONNECT, () =>

    socket.Emit("hi");
);

socket.On("connect", (data) =>

    socket.Emit("subscribe", "commons.wikimedia.org");
);

socket.On("change", (data) =>

    Console.WriteLine(data.title);
);

【讨论】:

尝试了这两个客户端。这真的对你有用吗?我永远不会触发“更改”事件。

以上是关于在 C# 中使用 Socket.IO的主要内容,如果未能解决你的问题,请参考以下文章

基于 NodeJs 打造 Web 在线聊天室

基于 socket.io 实现实时你画我猜游戏

在 C++ 中使用 C# 接口或在 C# 中使用 C++ 接口

如何在 C# 的泛型中使用扩展

在 C# 中定义 F# '**' 运算符

如何在 C# 中使用 libcinder?