我面临以下问题:
我有一个客户端(最终是n-clients)并且喜欢连接到服务器.客户端知道服务器/主机地址,但服务器不知道客户端的地址.我希望能够在客户端 - 服务器之间完成以下消息传递模式(客户端和服务器都需要能够完成以下消息模式):
同样重要的一点,我奋斗的地方是如何连接到主机,同时仍然能够发送和接收消息.主机无法连接到客户端,它只能接受客户端连接请求.请注意,我不寻找与客户端和服务器连接的代理/代理的解决方案,否则我可以直接使用rabbitmq等解决方案.
我怎样才能最好地完成这一点,参考代码示例甚至更好.
非常感谢.
我寻找满足以下要求的最佳实践:
我想知道我使用的框架BeginReceive和EndReceive实现的IAsyncResult回调是否是最先进的,因为我的目标是.Net 4.5.有没有更好的解决方案,例如使用NetworkStream或其他API选择?使用BeginReceive/EndReceive实现真正让我感到困惑的是,在EndReceive之后,我必须再次调用BeginReceive并再次注册回调.这对我来说听起来像是一个可怕的开销.为什么不能将新数据异步在任何时候,在同一时间增加了另一个环境中建立被然后通过引发的事件路由的完整信息?
使用IAsyncResult的论点通常是在处理线程处理时给出的,但是反对以下内容:使用NetworkStream并简单地读取和写入流.如上所述,只交换字符串消息,每个协议的每条消息都由换行符标记完成.单独的任务/线程将轮询流式读取器(基于网络流)ReadLine().它可能不会比那更简单,可以吗?
我基本上要问的是,以下代码如何才能真正实现异步?
public class SocketClient
{
private TcpClient client;
private StreamReader reader;
private StreamWriter writer;
public event Action<string> MessageCallback;
public SocketClient(string hostname, int port)
{
client = new TcpClient(hostname, port);
try
{
Stream stream = client.GetStream();
reader = new StreamReader(stream);
writer = new StreamWriter(stream);
writer.AutoFlush = true;
//Start Listener on port
StartListener();
}
catch (Exception e)
{
throw new Exception(e.ToString());
}
}
public void …Run Code Online (Sandbox Code Playgroud) 我理解如何在C#中使用Roslyn执行整个脚本,但我现在想要完成的是在脚本中编译一个类,实例化它,将其解析为接口,然后调用已编译和实例化的类实现的方法.
Roslyn是否公开了这样的功能?你能指点我这样的方法吗?
谢谢
我需要编写一个围绕第三方api的包装器,它会使用消息泵,因此根据是否在UI线程(例如在wpf应用程序中)实例化包装器(例如控制台应用程序),需要对其进行非常不同的处理).
如果它不在UI线程上运行,那么我需要一个调度程序并实现我自己的消息泵.
为此,我需要知道包装器是否在wpf应用程序中实例化.仅确定实例化是否发生在UI线程上是不够的(即使在wpf应用程序中,实例化包装器的线程可能不是UI线程).
有什么办法我可以弄清楚我是在一个带有消息泵或控制台应用程序的wpf或windows窗体环境中我必须实现自己的消息泵吗?
谢谢
我寻找如何通过RabbitMQ加速消息传输的想法.
我在Windows 64位上安装了最新版本,在本地计算机上运行服务器,我也通过C#实现发布和使用该服务器.我最初以每秒40,000条消息的速度增加,这令人印象深刻但不符合我的需求(我与一个自定义二进制阅读器竞争,每秒可以处理2400万个未解析的16字节大字节数组;显然我不希望接近这个但是我试图改善至少).我需要尽快发送大约115,000,000条消息.我不想保留数据,并且连接将直接针对单个消费者.然后,我构建了16b字节数组的块,并在没有任何改进的情况下发布到总线上.传输速率最高可达45mb /秒.我发现这非常慢,因为最终它应该归结为原始传输速度,因为我可以创建大小为几兆字节的字节数组,其中交换机的路由效率与原始传输速度相比可以忽略不计.为什么我的消息总线最大传输速度为45mb /秒?
我正在寻找使用C#如何为我的特定架构实现并发框架的想法:
我实现了几个模块/容器(实现为类),它们都是单独连接到消息总线的.每个模块主要产生或主要消耗,但所有模块还实现用于两个给定模块之间的通信的请求/应答模式.我对并发和异步编程非常陌生,但本质上希望以并发方式而不是同步方式运行整个架构.鉴于以下要求,我真的很感激为我的特定用例考虑哪些技术(TPL,ThreadPool,CTP,开源库,......)的指针:
鉴于我喜欢管理你建议我应该关注的并发实现?
编辑:我想强调,我面临的最大问题是如何方便地将每个容器/模块连接到线程/任务池,以便每个模块都运行异步,同时仍然提供这些模块之间的完全进出通信.在我没有解决将所有模块连接到可以处理动态涉及的任务/线程数量的并发平台之前,我并不太关心优化单个生产者/消费者模式.
c# concurrency multithreading asynchronous task-parallel-library
我有一个List<byte[]>,我喜欢将每个反序列byte[]化为Foo.列表是有序的,我喜欢写一个并行循环,其中结果List<Foo>包含所有Foo的顺序与原始顺序相同byte[].该列表非常大,可以使并行操作变得有价值.有没有内置的方法来实现这一目标?
如果没有,任何想法如何实现同步运行这一切的加速?
谢谢
我试着弄清楚如何在CallMe<T>()类中访问静态方法DoSomething.反思是唯一的解决方案吗?我不想实例化一个类型的对象MyAction.另外,如果通过反射进行,有一种方法可以通过方法内的反射创建方法CallMe<T>()一次,然后多次调用它来对同一个"反射"方法执行多个操作?或者有没有比通过反思更好的方式?我基本上想要创建模板实现样式类,例如MyAction定义如何byte[] DoThis(string text)执行其职责.然后,AskForSomething()将指定正在使用的模板,并根据该模板CallMe<T>()继续其工作.
public class AskSomething
{
public void AskForSomething()
{
DoSomething doSomething = new DoSomething();
doSomething.CallMe<MyAction>();
}
}
public class DoSomething
{
public void CallMe<T>()
{
Type type = typeof(T);
//Question: How can I access 'DoThis(string text)' here?
//Most likely by reflection?
}
}
public class MyAction
{
public static byte[] DoThis(string text)
{
byte[] ret = new byte[0]; //mock just to denote …Run Code Online (Sandbox Code Playgroud) 我JsonDateHandler在当前的Nuget ServiceStack版本4.0.5.0中找不到枚举.
有什么指针吗?
我从Continuum网站上下载了最新的稳定的Anaconda安装,结果是Anaconda 4.3.1(64位)和Python 3.6.0.我在Windows 10环境中.
但是缺少pip3,我无法通过pip3安装任何Python 3.x软件包.
我究竟做错了什么?
c# ×8
asynchronous ×3
concurrency ×2
anaconda ×1
client ×1
collections ×1
dispatcher ×1
erlang ×1
generics ×1
interface ×1
messaging ×1
pip ×1
python ×1
rabbitmq ×1
reflection ×1
roslyn ×1
servicestack ×1
sockets ×1
tcp ×1
ui-thread ×1
windows ×1
wpf ×1
zeromq ×1