我正在尝试设置一个特定的场景,但很明显,我遇到了问题。我的服务器是一个主要托管WCF服务的站点,但我也希望在那里添加一个XSockets主机。我按照readme.txt中的说明在bootstrap代码文件中有标准代码。在客户端连接时,我正在启动一个工作线程,它基本上是客户端将监视的心跳。控制器的相关代码如下:
public class HeartbeatController : XSocketController
{
public void AddMessage(string message)
{
this.SendToAll(message, "addMessage");
}
}
在我的工作线程中,我称之为:
string message = String.Format("pump", Math.Round(cpuCounter.NextValue());
ClientPool connection = ClientPool.GetInstance("ws://mywebsite:4502/HeartbeatController", "*");
connection.Send(message, "addMessage");
目前我正在使用如下所示的控制台客户端对此进行测试:
class Program
{
static XSocketClient socketClient;
static void Main(string[] args)
{
Console.WriteLine("Starting client...");
string url = "ws://mywebsite:4502/HeartbeatController";
socketClient = new XSocketClient(url, "*");
socketClient.OnOpen += socketClient_OnOpen;
socketClient.Open();
while (true)
{
// let it sit and display the "pump" messages
string input = Console.ReadLine();
if (input.Equals("Q", StringComparison.Ordinal))
{
break;
}
}
}
static void socketClient_OnOpen(object sender, EventArgs e)
{
Console.WriteLine("socketClient Opened");
socketClient.Bind("addMessage", OnAddMessage);
}
private static void OnAddMessage(ITextArgs textArgs)
{
Console.WriteLine("AddMessage :: {0}", textArgs.data);
}
}
在客户端上,如果我在socketClient_OnOpen方法中放置一个断点,它会被点击,所以我认为它是连接的。但泵消息永远不会传达给客户。
两个问题:
感谢您的帮助!
答案 0 :(得分:1)
因此,要查看您的泵实际发送到服务器的内容,我添加了一个自定义管道。
public class MyPipeline : XSocketPipeline
{
//Incomming textmessage
public override void OnMessage(IXSocketController controller, ITextArgs e)
{
Console.WriteLine("IN " + e.data);
//Let the message continue into the server
base.OnMessage(controller, e);
}
//Outgoing textmessage
public override ITextArgs OnSend(IXSocketProtocol protocol, ITextArgs e)
{
Console.WriteLine("OUT " + e.data);
return base.OnSend(protocol, e);
}
}
因为我看到你发送的是一个实际上没有名为" message"的属性的字符串。动作方法" AddMessage"希望您传入一个string类型的属性消息。所以你可以通过两种方式解决这个问题,两者都很简单。
只需将AddMessage中的字符串参数替换为ITextArgs
即可public void AddMessage(ITextArgs message)
...或
传入工作线程中的对象而不是像这样的字符串
connection.Send(new {message}, "addMessage");
所以你需要做的就是改变这一行
connection.Send(message, "addMessage");
这一行
connection.Send(new {message}, "addMessage");
编辑:顺便说一下,4.0正在推出,客户端将得到很大的改进以及服务器端的东西。