我是一名经验丰富的C#开发人员,但到目前为止我还没有开发过TCP服务器应用程序.现在我必须开发一个高度可扩展的高性能服务器,它可以处理至少5-10万个并发连接:通过GPRS从GPS设备获取字节数据.
常见的通信过程应如下所示:
所以,在我的服务器中我需要
我开始通过互联网阅读这个主题,但对我来说这似乎是一场噩梦.有很多方法,但我找不出哪个是最好的.
异步套接字方法对我来说似乎是最好的,但是以这种异步方式编写代码非常糟糕且不易调试.
所以我的问题是:您认为在C#中实现高性能TCP服务器的最佳方式是哪种?你知道任何好的开源组件吗?(我尝试了几个,但我找不到一个好的.)
有人真的可以帮助我吗?我一直在寻找为我的SVG运行脚本的方法.但我得到的所有东西都不匹配!并且它没有包含足够的信息,因为他使用了这组代码.例如,一个使用了event.target,另一个使用了event.getTarget(),另一个使用了event.target.firstchild.data.有人可以帮帮我吗?
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<path d="M150 0 L75 200 L225 200 Z" />
</svg>
Run Code Online (Sandbox Code Playgroud)
是svg路径的一个例子吗?我需要的是得到那些坐标,可能把它放在一个变量中,并用它作为另一个svg的坐标.那我该怎么做呢?另一件事是我如何通过在界面中输入数字来更改这些坐标.
所以我试图寻找答案,但就像我说的,我没有找到我需要的信息,或者我只是不知道它给我的信息.
我读过一些文章说,像MySQL这样的RDBMS并不擅长扩展,但像MongoDB这样的NoSQL可以很好地分解. 我想知道RDBMS提供的哪个功能本身不能很好地分片.
我期待用C++编写一个服务器应用程序,用于同时处理数万个客户端.它应该在Windows和Linux下运行.我一直在寻找框架和库,并遇到了Boost Asio,这似乎是一个非常成熟和广泛使用的替代品.我只是在绞线/线程池周围缠绕我很困难,主要是因为有数百万个模板.我的背景主要是在C中,所以我并不习惯Boost一般似乎充满了模板的混乱.我试图找人开发围绕升压短耳相对较薄的包装将采用股,绑定等的照顾线程/同步方面的,但一直未能找到一个还没有谁可以在我的预算之内做到这一点(2或300美元).
您是否可以推荐任何其他可扩展的库以及Boost Asio(例如,在Windows上使用IOCP,在Linux上使用epoll等),或者我可能会找到熟练的Boost开发人员寻找较小的自由职业的来源?
非常感谢您的任何帮助.
亲切的问候,
Philip Bennefall
我们正在使用Cassandra数据库,该数据库将存储PB级数据.我们正在考虑使用ElasticSearch或Solandra,但我们正在享受一个有趣的时间来决定使用哪个.我想知道我们的数据库是否会变得太大.我知道ElasticSearch是可扩展的,但在多大程度上 - 特别是对于Cassandra数据库.
另一方面,Solandra是为Cassandra制作的,具有很高的可扩展性,但又在多大程度上?
两者都是可扩展的,但使用Cassandra的可扩展性如何?
我正在尝试设计一个专门针对每个聊天室中的大型群组(> 50个用户)的实时群聊应用程序.并非所有用户都会立即进行主动聊天,但是当聊天进入聊天室时,人们可以期望许多用户只是闲置/收听和接收更新.
我已经制定了一个非面向云的原型,并且正在重新设计基于云的系统.
我希望有一个"重定向/负载平衡"服务器(LBServer)重定向到一系列后端"聊天"服务器(CServers).当用户请求加入来自客户端的特定聊天室,客户端将连接到LBServer和LBServer将与维护在内存中的聊天室的一个实例特定CServer的连接信息回复.然后客户端将断开与LBServer的连接并连接到CServer.只要用户留在聊天室中,就会保持与CServer的这种连接.CServer负责更新记录聊天室状态的后端数据库,并通知聊天室中与更新相关的其他客户端.
你已经可以设想如果有太多的用户在一个聊天室(这样一个CServer必须保持所有这些用户的持久连接)的存在,如果在室内活动增加过去的CServer的处理速度的门槛,以保持一个"热点"的场景将展开所有更新.
在这一点上,我提出了一个天真的解决方案,以便我的系统仍然可扩展.我可以加载一个更大的CServer实例,复制聊天室的状态,并请求"热"CServer中的所有用户重新连接到新的更大的实例.我不相信这是处理这种系统可扩展性的正确方法.
我有几个问题:
鉴于我希望聊天的实时性,有没有更合适的方法来设计我的后端系统,以避免必须持续连接到一个服务器实例?
当我在数据库中跟踪状态时,我是否还需要打扰隔离每个聊天室的处理以在一个CServer上发生?我想留出空间让用户能够同时参加多个聊天室.如果我们使用当前模型,客户端将必须维护与我的云的多个连接(用户所在的每个聊天室都有一个).这对客户端来说太糟糕了.作为修订,我设想客户保持与"通用"CServers的连接,这些CServers将监听用户当前所在的聊天室的变化并相应地更新它们.
所有的反馈和意见都将受到极大的赞赏,我很乐意详细说明任何不清楚的事情.谢谢.
我刚开始用Python学习套接字.所以我写了一些聊天服务器和客户端的例子.我在互联网上看到的大部分内容似乎都使用线程模块来处理客户端与服务器的连接(异步).我确实理解,对于可伸缩服务器,你需要使用一些额外的技巧,因为成千上万的线程可以杀死服务器(如果我错了,请纠正我,但这是由于GIL吗?),但这不是我现在关注的问题.
奇怪的是,我在Python文档中找到了创建子进程的正确方法(不幸的是我丢失了引用,对不起:()来处理套接字.
所以问题是:使用线程还是多处理?还是有更好的解决方案吗?
请给我答案并向我解释不同之处.
顺便说一句:我确实知道像Twisted这样的东西写得很好.我不是在寻找预先制作的可扩展服务器,而是试图了解如何编写可以扩展的服务器或者至少可以处理10k个客户端.
编辑:操作系统是Linux.
我正在开发一个具有可扩展性的我的项目,我已经走到了一个十字路口.在我的网站上,我想检测用户是否在线.我无法想到处理这个问题的最佳方法.我想的方式就是沿着这些方向(在伪代码中):
// SQL user table:
user {
"name": "blah blah",
"email": "derpy@derpyderp.com",
"online": false
}
Run Code Online (Sandbox Code Playgroud)
因此,每当用户登录时,我都可以将其online列更新为true.然而,这最终会导致每次用户登录时发生SQL查询,如果发生这种情况,我会说,每秒10次登录,那就是发生了很多查询.另一种方式我认为我可以做同样的事情,但在另一个表中:
// Activity table:
activity {
"user_id": 2,
"online": true
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我认为由于与user表的分离,这将导致更少的内存消耗.但是我不确定它是否会对性能产生任何实际影响.
所以,如果你能用你的见解祝福我,我会更感激,谢谢你.
我想设计一个新的QIcon,并使其看起来像固定文本,并带有一个圆角矩形
.-----.
| Phy |
`-----´
Run Code Online (Sandbox Code Playgroud)
在最终应用了比例转换的QPainter上绘画时,图标应该缩放而没有“像素块”效果(例如,当我绘制到QGraphicsView的一部分且在其场景上应用了比例的小部件时)。
因此,我很难知道如何绘画我的QIcon。如果按照以下方式进行操作,我将绘制一个始终具有固定像素数量的QPixmap,从而在比例尺足够大时不可避免地引入像素块效果
void MyWidget::drawIcon(QPainter *painter, QPoint pos) {
QPixmap pixmap = icon.pixmap(QSize(22, 22),
isEnabled() ? QIcon::Normal
: QIcon::Disabled,
isChecked() ? QIcon::On
: QIcon::Off);
painter->drawPixmap(pos, pixmap);
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找的方法与QFont的drawText工作方式类似。无论我的缩放比例有多大,绘制字体时总是看起来很锐利,无法检测到单个像素。
我想我可以告诉QPainter我将图标绘制到给定的像素矩形中,然后在允许将项目渲染成可能更大的矩形或像素图之前先QPainter转换矩形本身QIconEngine::paint。但是我看不到我该怎么做。
我只是愚蠢而看不到明显的解决方案吗?
我知道Oldie但是好东西.这个问题被问了很多次,但我没有得到明确的答案.可伸缩的背景图像,最好只有CSS,如果必须的话,愿意使用jQuery支持.我遇到的一个问题(即使用CSS3背景图像)是图像下方的空白空间,当它的高度小于浏览器窗口高度时.(例如:http://css-tricks.com/examples/ImageToBackgroundImage/)
这就是我想要完成的事情:
以下是一些说明这些目标的例子(尽管我认为可以做得更好):
谢谢你,谢谢你,谢谢你.