3
我试图实现一个模块,通过套接字发送消息到服务器。它将用于多线程环境,所以这个“客户”对象在线程之间共享。 我的问题是,我应该使用发送方法的锁块来使这个类线程安全吗? (可能是的,但我看到很多示例代码,没有任何锁定。)线程安全类通过套接字发送消息
这是我的MessengerClient
类的简化版本。
public class MessengerClient
{
private Socket socket;
public MessengerClient()
{
socket = new Socket(SocketType.Stream, ProtocolType.IPv4);
}
public void Connect(string host, int port)
{
socket.Connect(host, port);
}
public void SendMessage(IMessage message)
{
var buffer = ObjectConverter.ConvertToByteArray(message);
var args = new SocketAsyncEventArgs();
args.Completed += args_Completed;
args.SetBuffer(buffer, 0, buffer.Length);
//lock (socket)
//{
socket.SendAsync(args);
//}
}
}
您的'MessengerClient'是否为每个客户端实例化? – bas
是的,那是我的问题。如果你需要传输线程安全,你有多个对象使用相同的连接?看起来你应该有一个管理网络流量的“连接管理器”对象。 – sircodesalot
这将仅实例化一次,并且其他一些对象(来自不同线程)将通过SendMessage方法发送消息。 – tuta4