如何在MMORPG客户端/服务器通信中使用UDP和TCP协议?
例如:
客户端是否通过UDP向服务器广播(播放器位置等)?或相反亦然?
或者更像是使用TCP,其中客户端请求服务器移动播放器.服务器接收请求,移动播放器并将播放器发送回客户端,播放器现在位于xyz位置?
聊天频道必须使用TCP实现?
这有什么好文章/书吗?我发现了点点滴滴,但似乎真正的肉和土豆都是从经验中获得的.
假设Java有两种套接字:
想象一下两个过程的情况:
X =客户
Y =服务器
服务器进程Y:有一个"ServerSocket",即正在侦听TCP端口
客户端进程X:通过"Socket"向Y发送连接请求.
Y:然后该accept()方法返回一个新的客户端类型"Socket",
当它发生时,两个套接字得到"互连",
所以:客户端进程中的套接字,与服务器进程中的套接字相连.
然后:通过套接字X读/写就像通过套接字Y读/写.
现在,两个客户端套接字互连!!
但是......
如果我在同一个进程中创建两个Client套接字,我想让它们"互连"怎么办?
......甚至可能?
假设如何在不使用中间ServerSocket的情况下使两个客户端套接字互连?
我已经通过创建两个Thread来连续读取A和写B来解决它,而另一个用于读取B和写入A ......
但我认为这可能是更好的方式......(那些世界耗能的线程不是必需的使用客户端 - 服务器方法)
任何帮助或建议将不胜感激!谢谢
编辑:
应用示例:"现有服务器应用程序可以转换为客户端应用程序",例如VNC服务器,一个客户端套接字连接到VNC服务器,并创建其他客户端套接字(连接到中间服务器),然后应用程序互连两个客户端导致VNC服务器是客户端应用程序!然后,不需要公共IP.
VNCServer --- MyApp ---> |中间服务器| <---用户
这个名字几乎说明了一切.现在我正在使用Squirrel - 它经常崩溃并且遇到内存问题(我已经尝试增加堆大小).我不需要任何特别花哨或功能齐全的东西 - 只需要2.4 GB的RAM来存储150万行,8列结果集.
更新:我在下面的回答中提供了完整的代码示例.
我已经构建了自己的小型自定义XML-RPC服务器,因为我想在服务器端和客户端都保持简单,我想要完成的是使用WCF创建一个最简单的客户端(最好是C#) .
假设通过XML-RPC公开的服务合同如下:
[ServiceContract]
public interface IContract
{
[OperationContract(Action="Ping")]
string Ping(); // server returns back string "Pong"
[OperationContract(Action="Echo")]
string Echo(string message); // server echoes back whatever message is
}
Run Code Online (Sandbox Code Playgroud)
因此,有两个示例方法,一个没有任何参数,另一个带有简单的字符串参数,两个都返回字符串(仅为了示例).服务通过http公开.
Aaand,下一步是什么?:)
嗨,我有一个用于上传文件的球衣客户端.我尝试在本地使用它,一切正常.但在生产环境中,我要设置代理.我浏览了几页,但无法得到确切的解决方案.有人可以帮我这个吗?
这是我的客户代码:
File file = new File("e:\\test.zip");
FormDataMultiPart part = new FormDataMultiPart();
part.bodyPart(new FileDataBodyPart("file", file, MediaType.APPLICATION_OCTET_STREAM_TYPE));
WebResource resource = null;
if(proxy.equals("yes")){
//How do i configure client in this case?
}else{
//this uses system proxy i guess
resource = Client.create().resource(url);
}
String response = (String)resource.type(MediaType.MULTIPART_FORM_DATA_TYPE).post(String.class, part);
System.out.println(response);
Run Code Online (Sandbox Code Playgroud) 有谁知道如何使用以下两个界面签名创建RestEasy客户端调用来上传文件?我根本找不到任何信息.我知道如何使用HttpClient,但我想使用客户端代理来保持一致.
@POST
@Path("/upload")
@Consumes("multipart/form-data")
public void uploadFile(MultipartFormDataInput input);
@POST
@Path("/upload2")
@Consumes("multipart/form-data")
public void uploadFile2(@MultipartForm FileUploadForm form);
Run Code Online (Sandbox Code Playgroud)
弗雷德里克,任何帮助将不胜感激
我正在尝试实现两个Windows服务,每个服务都是自己的gSoap接口,并且都是每个接口的客户端和服务器.所以我的问题是我在两个接口(带有成员的类)中使用相同的数据类型,并使用soapcpp2.exe -q选项生成c ++代码,这将创建两个不同的命名空间,这很好,它可以工作,但问题是由于名称空间分离,两个接口中应该相同的数据类型现在是不同的,但是如果我删除名称空间,我将发生冲突,因为共享数据类型在两个接口中具有相同的名称.
"问题:
interface 1:
---
>class xsd__Address
{
char *email;
char *url;
};
>int ns1__getAddress(xsd__Address& ret);
---
interface 2:
---
>class xsd__Address
{
char *email;
char *url;
};
>int ns2__setAddress(xsd__Address& ret);
---
Run Code Online (Sandbox Code Playgroud)
在每个头文件的定义之后我用soapcpp2.exe编译它,例如:
soapcpp2.exe -qintf1 -n xxxx //用于接口1
soapcpp2.exe -qintf2 -n xxxx //用于接口2
所以当我的项目中使用两个接口(接口1和接口2)时,我需要这样的东西:
intf1::Interface1 int1;
int1.endpoint="xxx";
intf1::ns__Address address;
int1.ns1__getAddress(address);
intf2::Interface1 int2;
int2.endpoint="xxx";
int2.ns2_setAddress(address); //this don't compile like i was expecting because to the compiler they are not the same object (and it is wright...)
Run Code Online (Sandbox Code Playgroud)
问题:
是否可以在两个或更多接口之间共享数据类型?是?这是如何实现的?
如果不是,实施这个的最佳解决方案是什么?
我想通过Php在服务器中编写一个文本文件,让客户端下载该文件.
我该怎么做?
本质上,客户端应该能够从服务器下载文件.
相当愚蠢的问题,但我似乎无法在文档或手册页中找到答案.
从8.3开始我认为,psql CLI客户端不会显示内联大查询的结果.它会导致"不太喜欢"的结果查看器在您点击q时消失.
这使得在后续查询或更新中使用来自第一个查询的数据非常困难.
有没有人知道一个开关或强制psql显示内联查询结果的方式,就像老客户端一样?
编辑:\ x开关执行此操作,但我需要多行视图.
必须有许多旨在与服务器通信的应用程序.我的问题只是关于安装在iOS设备上的App +服务器端服务交互.Web应用程序不是我所说的,并且根本不应该涉及这个讨论的网页.典型的例子是像Instagram和Twitter这样的应用程序,其中App和服务器之间交换的大多数信息只是String,Image和Integers(用JSON或XML包装)等数据,不需要网页显示.
我的问题是:如果您是一名独立的应用程序开发人员,并且您从头开始设计这样的应用程序而没有任何现有的网站API,数据库结构或应用程序(因此您不受任何现有API或数据库结构或应用程序协议的限制),什么是最有效的方法?
服务器方面需要做的是:
据我所知,有3个明显的选项来实现服务器端:
(请随意添加更多选项)
我的问题是:
我知道Stackoverflow上有很多非常有经验的专家,但我看到更多的新手刚进入iOS开发区,对服务器/数据库编程经验不太了解.我希望这个线程可以帮助那些正在考虑设计具有服务器/客户端结构的应用程序但不知道从哪里开始的人.
ps:我会不断更新这个问题主题并在此主题上添加我的发现,以帮助stackoverflow上的所有其他用户.:-)请尽量使您的答案信息丰富,易于理解和建设性.我猜这个帖子的大多数读者都是这个伟大社区的新成员.