我之前从未在Linux上编写任何IPC C++.
我的问题是我将拥有多个客户端(编写器)和一个服务器(读取器).所有这些都将在同一台机器上.作者将向读者提供数据块(字符串/结构).然后读者将在FIFO中读取它们并对它们执行某些操作.
据我所知,Linux上的IPC类型是管道或套接字/消息队列.
我只是想知道是否有人可以推荐我走下去的路.我倾向于插座,但我没有真正的基础.在踏上这段旅程之前,有什么我应该阅读/理解的吗?
谢谢
我有一个用python编写的游戏服务器和扭曲的游戏服务器,以及一个python中的旧游戏客户端.我在Javascript中编写了一个新的游戏客户端,它将与websockets连接.我现在面临一个设计决定,
编辑:链接和清晰度
因此,虽然我现在知道为什么连接到套接字的Outputstream需要在立即发送数据时刷新,但我仍然不明白为什么我需要在String的末尾添加换行符.
这有效:
// writer is a PrintWriter
writer.println("Hello World!");
Run Code Online (Sandbox Code Playgroud)
这不是:
Writer.print("Hello World!");
writer.flush;
Run Code Online (Sandbox Code Playgroud) 我有一个服务器和一个客户端应用程序,我的服务器侦听端口10015和一个发送命令到该端口的客户端.目前两者都在同一台机器上运行,但未来的目标是在不同的机器上运行.我现在正在使用这部分.
我接下来需要做的是让我的服务器向我的客户端发送命令.所以我想我可以在客户端的服务器上重新使用我的代码来监听端口.
但我不确定这是最好的方法.建议?
当我第一次尝试这个时,我首先运行我的客户端应用程序,并将命令发送给自己.我的服务器应用程序无法绑定到端口(我假设您只能在给定端口上侦听一个进程?)
问题1)服务器如何向客户端发送命令?我是否必须创建服务器 - >端口10015上的客户端通信和客户端--->服务器在不同的端口,如10016?
问题2)当我使用send()从客户端 - >服务器发送命令时,接收特定命令的ACK的最佳方法是什么?如果我不需要发送任何数据,是否有办法在服务器收到数据包时自动获得ACK?
我目前正在为我要发送的每个命令执行此操作:
create socket()
conenct() to socket
send() packet
then call recv() to receive any data
then shutdown() connection
and closesocket() at end
Run Code Online (Sandbox Code Playgroud)
不确定是否有更好的方法吗?当我的应用程序忙时,我希望每秒发送1-10个命令.
谢谢,我是这个网络应用程序的新手,所以任何帮助都非常感谢.
阅读一些评论后编辑:
我正在使用TCP协议.当我说ACK时,我的意思是我只是想从其他应用程序获得一些确认,即该命令已被接收并且没有错误地处理
嘿,我有大约30个由用户创建和修改的变量(没有一个来自输入,因此提交表单实际上不是一个选项),一旦修改完成JS函数处理变量和配偶将它们发布到控制器然后将其发送到模型.
现在,正如标题中所示,我的问题是我发送它们的最佳方式是什么?
时间和注意力,Ido
我正在WebSocketnode.js中构建一个服务器.当客户端已连接时,我想立即向其发送消息.
但是,当我在握手完成后发送它时,Chrome中出现错误:
Status line contains embedded null
Run Code Online (Sandbox Code Playgroud)
当我setTimeout在握手后100毫秒使用a 发送消息时,它可以工作,但是当使用这种技术使用10毫秒时,它再次无效.
看起来握手和消息在一起发送时会被附加,以防它们之间的时间间隔很小(虽然我不确定,因为我不知道如何查看WebSocketChrome中的原始流量 - 如果有人我喜欢也听到了).
我不想让服务器等待100毫秒,因为它对于客户端来说肯定是显而易见的,而且它看起来像一个肮脏的技巧而不是一个很好的解决方案.
如何在握手后立即发送消息?
我有一个服务器和一个客户端程序.服务器程序一直在运行,等待来自客户端的请求.对于服务器响应每个客户端,使用sleep()函数需要5秒.
在多线程版本上,如果我同时调用两个客户端,则每个客户端需要大约5秒才能获得响应.相同的测试给出5秒用于第一客户端和10在非多线程版本的第二客户端.显然有待预期.虽然有一些问题.处理器是单核 Athlon!
当cpu上的核心只有一个时,多线程服务器模块如何比非线程运行得更快?
好的,所以我已经阅读了Oracal网站以及本网站上的一些问题.我仍然很难理解有关插座的一些事情,所以我会看看这里是否有人可以花时间向我的慢脑解释它.我正在做的是建立一个聊天客户端和聊天服务器(一举学习摇摆和插座).尽管我已经看过所有的例子,但我仍然不清楚他们是如何工作的.我知道带有输入流的1个套接字和带有输出流的1个套接字是如何工作的,但除此之外我无法理解,因为这是我发现的大多数资源所解释的.以下是我对此的一系列问题.
这是我的主要问题.如果我能理解得那么多,我很确定我可以自己弄清楚我需要的其余部分.
.
我正在尝试构建一个可以回应来自TCP或UDP客户端的输入的服务器.
到目前为止,我能想到的最好的是:
import java.net.*;
import java.io.*;
public class EchoServerMultiProtocol {
public static void main(String[] args) throws IOException {
String clientSentence;
String capitalizedSentence;
while (true) {
/*******************************************************************
* * Handle TCP * *
*******************************************************************/
ServerSocket TCP_Socket = new ServerSocket(6789);
Socket connectionSocket = TCP_Socket.accept();
BufferedReader inFromClient = new BufferedReader(
new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(
connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';
outToClient.writeBytes(capitalizedSentence);
/*******************************************************************
* * Handle UDP * *
*******************************************************************/
DatagramSocket UDP_Socket = new DatagramSocket(9876);
byte[] receiveData = …Run Code Online (Sandbox Code Playgroud) 如果我有一台服务器和一台客户端,我在两者之间打开了一个套接字:
1.客户端是否有可能有一个printWriter流,以便将内容写入套接字,但服务器在同一时间内不会有一个bufferReader?
谢谢