我正在重构一些客户端-服务器代码,它使用术语“响应”、“结果”和“回复”来表示同一件事(来自服务器的答案)。虽然它并不是那么重要,但在编写新代码时很难猜测要使用哪个词,所以我想将这三个术语统一为一个术语并进行适当的重构,但我不确定哪个词是“最好”,如果有这样的事情的话。
根据优先级和标准对此案例的命名有什么建议吗?
我对 Spring Integration 有一些疑问:
我们可以使用 Spring Integration 框架集成两个以上的应用程序吗?
是点对点集成还是面向中间件的集成?
在客户端 - 服务器架构中如果(客户端和服务器)都是基于 Java 的应用程序,那么我们应该使用什么进行同步通信?意味着,我们应该选择 Spring Integration 还是 JAX-RPC?对于同步通信,哪一个会更快?
所以我试图制作一个非常简单的系统来从客户端向服务器发送消息(稍后也从服务器到客户端,但首先是婴儿步骤)。我不确定如何使用 UDPClient 发送和接收消息(尤其是接收消息),主要是因为我没有任何东西可以触发该ReceiveMessage()功能,而且我不确定会发生什么。
源代码位于此链接,转到文件>下载。如果您只想运行 exe,它已经构建好了。
所以我的问题基本上是:我怎样才能轻松使用UDPClient,我怎样才能让这个系统工作,以及执行这种连接有哪些技巧?我应该注意什么(线程、代码问题等)?
来源。
我正在使用套接字编程在 Linux(客户端和服务器)上编写应用程序。我遇到过这样一种情况,我的服务器应用程序从不响应另一端的初始 SYN 数据包。
我还在调试这个问题。
由于我的服务器正在侦听端口,因此它永远不会生成接受事件。接受事件是在 TCP 握手完成后生成还是在接收到初始 SYN 数据包时生成接受事件?
一些有用的链接,会有所帮助。
最好的事物
我正在尝试在 node.js 中编写一个应用程序以向设备(具有 udp 服务器)发送 udp 请求,然后接收响应并显示它。设备以这样一种方式运行,即在其端口 11220 上收到请求后,它立即返回响应。
下面的代码向设备发送 udp 请求,设备立即响应(我可以在wireshark中看到它),但我无法处理/显示恢复的消息。或者至少我只是希望能够在收到设备回复时显示一条消息。请让我知道我的代码中缺少什么或向我展示一个完整的代码来完成它。非常感谢。
同样,我不喜欢使用 socket.io 等。
var PORT = 11220 ;
var HOST = '192.168.1.111';
var dgram = require('dgram');
var message = new Buffer(9);
var client = dgram.createSocket('udp4');
client.send(message, 0, message.length, PORT, HOST, function(err, bytes) {
if (err) throw err;
console.log('UDP message sent to ' + HOST +':'+ PORT);
client.close();
});
client.on('listening', function () {
var address = server.address();
console.log('UDP Server listening on ' + address.address + ":" + address.port); …Run Code Online (Sandbox Code Playgroud) 在尝试实现服务器和客户端时,我注意到客户端正在写入标准输出而不是通过网络。我发现 connect() 返回的文件描述符始终为零,这解释了为什么它写入标准输出。但我不明白为什么 connect() 总是返回零而不是有效的套接字。我在网络上发现的所有具有相同问题的文章都是由于将 if() 包装在 connect() 调用周围的优先级问题造成的。但我还没有这样做,任何帮助将不胜感激。
服务器代码
int setUpServer(struct fuzzerObj *ptr, int *firstClient)
{
/* Declarations */
int hostSocket, yes = 1, rtrn, clientfd;
union
{
struct sockaddr_in in;
}address;
/* Create Socket */
hostSocket = socket(AF_INET, SOCK_STREAM, 0);
if(hostSocket < 0)
{
errorHandler("Could not create socket\n", FUNCTION_ID_SET_UP_SERVER);
return -1;
}
/* Reuse Address */
rtrn = setsockopt(hostSocket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes));
if(rtrn < 0)
{
errorHandler("Couldn't Reuse Address\n", FUNCTION_ID_SET_UP_SERVER);
return -1;
}
/* Set Up Struct …Run Code Online (Sandbox Code Playgroud) 我编写了一个使用 firebird 数据库的应用程序,使用服务器和客户端。我最初使用 Delphi XE2 对应用程序进行编码,并且一切正常。我现在已经转移到 Delphi XE6。
我重新编译了服务器并且没有错误,但是现在我重新编译了客户端,它给了我以下错误:
ProjectPiping.exe 引发执行类 TDBXError 并显示消息“远程错误:读取 DSServerModule1.ClientHeight 时出错:Propery CliehtHeight 不存在。
我在网上读到你需要将 dfm 文件从 Object 更改为 Inherinted ,但这没有区别。
有没有人可以帮助我,因为我不认为我可以解决这个问题,除非回到 Delphi XE2
我是编程新手,我想编写一个简单的客户端服务器系统,其中客户端发送诸如“SAY house”之类的命令,服务器将关键字“SAY”检测为命令并返回关键字后面的任何内容(在这种情况下为“house” ”)。有很多例子如何做到这一点,但我还想通过这个项目学习的是一个很好的设计模式,可以解决这样的问题。我不想只在 Server.java 和 Client.java 等 2 个类中实现所有内容。
所以我从一个 Server 类开始,它在一个端口上启动服务器并等待客户端。当他从客户端收到请求时,Server 类将输入委托给“RequestHandler”类。此类执行 switch-case 部分以检测诸如“Say”或“SHUTDOWN”之类的命令,并通过接口调用相应的方法。
这是一个很好的模式吗?问题是例如服务“SHUTDOWN”。我必须将 Socket 对象一直带到执行命令的方法中。或者也许这种模式不适合升级具有更多功能的服务器?请帮助改进!
谢谢
public class Server {
private int port;
private ServerSocket server;
public Server(int port) throws Exception{
this.port = port;
try{
server = new ServerSocket(port);
}catch(Exception e){
System.out.println("Server kann nicht gestartet werden: "+e.getMessage());
throw e;
}
}
public Server(int port){
this.port = port;
}
public void start(){
Socket client;
Thread thread;
while (true) {
try {
client = server.accept();
// Verbindung eingegangen, Objekt …Run Code Online (Sandbox Code Playgroud) 我们正在尝试解决处理大量 Http POST 请求的问题,而在使用 Netty Server 时,我只能处理~50K requests/sec太低的请求。
我的问题是如何调整此服务器以确保处理> 1.5 million requests/second?
Netty4 服务器
// Configure the server.
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.option(ChannelOption.SO_BACKLOG, 1024);
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new HttpServerInitializer(sslCtx));
Channel ch = b.bind(PORT).sync().channel();
System.err.println("Open your web browser and navigate to " +
(SSL? "https" : "http") + "://127.0.0.1:" + PORT + '/');
ch.closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
Run Code Online (Sandbox Code Playgroud)
初始化程序
public …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个单个服务器/多个客户端 NetMQ 测试程序(我相信这应该使用路由器经销商模式),这将允许服务器使用单独线程上的工作人员处理唯一的客户端请求(并分别回复每个客户端),但我找不到适用于当前 nuget 版本(在撰写本文时为 v4.0.1.5)的单个工作示例。
每个客户端只应该发送一个请求(它包含它的 Id,因为它是一个 Dealer 套接字),并从服务器获得它的专用响应。服务器应该有一个线程池(IOCP 样式),它将使用消息并发回响应。
我在 NetMQ/Samples github 中找到了Multithreaded 示例,这似乎是我要找的,但它使用 aQueueDevice将客户端与工作人员连接起来,并且这个类似乎在某些时候已被删除:
var queue = new QueueDevice(
"tcp://localhost:5555",
"tcp://localhost:5556",
DeviceMode.Threaded);
Run Code Online (Sandbox Code Playgroud)
然后是netmq.readthedocs.io 上的Router-dealer 示例,它使用NetMQPoller,但不编译,因为它调用了不存在的RouterSocket.ReceiveMessage()和NetMQSocket.Receive(out bool hasmore)方法,这些方法已被删除:
public static void Main(string[] args)
{
// NOTES
// 1. Use ThreadLocal<DealerSocket> where each thread has
// its own client DealerSocket to talk to server
// 2. Each thread can send using it own socket
// …Run Code Online (Sandbox Code Playgroud) client-server ×10
java ×3
sockets ×3
tcp ×2
c ×1
c# ×1
chat ×1
delphi ×1
http ×1
jakarta-ee ×1
jax-rpc ×1
netmq ×1
netty ×1
networking ×1
node.js ×1
refactoring ×1
server ×1
terminology ×1
udp ×1
udpclient ×1
vb.net ×1
zeromq ×1