给定
我正在使用 XSockets 3.0.6,我认为它是最新的稳定版本。在 MS.NET 下,行为符合预期。在 Ubuntu 14.04 和 Mono 3.6.1 上,尽管服务器在向客户端发送消息之前存在某种延迟。
问题
在 MS.NET 上,当我在客户端中键入字符串并发送它时,所有客户端都会立即收到通知。在 Mono 上,虽然服务器收到了消息,但没有立即通知客户端。只有 1 条消息,我等了 5 分钟,客户仍然没有收到通知。当消息变为 5-6 时,所有客户端都会立即通知所有消息。似乎服务器使用某种缓冲但有条件 - 取决于.NET运行时,这很奇怪。
问题
难道我做错了什么?如何更改代码以便像在 MS.NET 中一样立即通知所有客户端?
代码
我遵循(并稍加修改)快速入门示例如下...
服务器
初始化
using (var container = Composable.GetExport<IXSocketServerContainer>())
{
container.StartServers();
foreach (var server in container.Servers)
{
Console.WriteLine(server.ConfigurationSetting.Endpoint);
}
Console.Write("Started! Hit 'Enter' to quit.");
Console.ReadLine();
container.StopServers();
}
自定义控制器
public class CustomController : XSocketController
{
public override void OnMessage(ITextArgs textArgs)
{
Console.WriteLine ("No delay = {0}", this.Socket.Socket.NoDelay);
if (!this.Socket.Socket.NoDelay)
{
Socket.Socket.NoDelay = true;
}
Console.WriteLine("Received {0} about {1}.", textArgs.data, textArgs.@event);
this.SendToAll(textArgs);
}
}
客户
var client = new XSocketClient("ws://127.0.0.1:4502/CustomController", "*");
client.OnOpen += (sender, eventArgs) => System.Console.WriteLine("OPEN");
client.Bind("foo", message => System.Console.WriteLine(message.data));
Thread.Sleep(1000);
client.Open();
string input;
System.Console.WriteLine("Type 'quit' to quit and any other string to send a message:");
do
{
input = System.Console.ReadLine();
if (input != "quit")
{
client.Send(input, "foo");
}
} while (input != "quit");