标签: client-server

db4o客户端/服务器似乎一次只能处理一个查询?

我们正在评估db4o(来自http://www.db4o.com的OO-DBMS ).我们已经针对客户端/服务器模式进行了性能测试,我们将服务器启动,然后立即与几个客户端进行对话.看起来服务器一次只能处理一个客户端的查询.

我们错过了某个允许这种情况的配置开关吗?服务器实现如下.客户端连接,查询(只读)和断开每个操作,并且操作在客户端进程中的多个工作线程之后立即运行.如果我们将一个客户端进程与同一服务器上的一个工作进程分开,我们会看到相同的行为.

有什么建议?

编辑:我们现在已经发现并尝试了Lazy和Snapshot QueryModes,尽管这可以缓解阻塞服务器问题(部分),但是当我们的客户端(我们运行40个等待1的并发测试客户端)时,我们仍然会看到严重的并发问题在发出随机操作请求之前-300ms锤击服务器.似乎有来自LINQ提供程序和IO内部的异常:-(

public class Db4oServer : ServerConfiguration, IMessageRecipient
{
    private bool stop;

    #region IMessageRecipient Members

    public void ProcessMessage(IMessageContext con, object message)
    {
        if (message is StopDb4oServer)
        {
            Close();
        }
    }

    #endregion

    public static void Main(string[] args)
    {
        //Ingestion.Do();
        new Db4oServer().Run(true, true);
    }

    public void Run(bool shouldIndex, bool shouldOptimizeNativeQueries)
    {
        lock (this)
        {
            var cfg = Db4oFactory.NewConfiguration();
            if (shouldIndex)
            {
                cfg.ObjectClass(typeof (Sequence))
                               .ObjectField("<ChannelID>k__BackingField")
                               .Indexed(true);
                cfg.ObjectClass(typeof (Vlip))
                               .ObjectField("<ChannelID>k__BackingField")
                               .Indexed(true);
            }
            if (shouldOptimizeNativeQueries)
            {
                cfg.OptimizeNativeQueries(true);
            }

            var …
Run Code Online (Sandbox Code Playgroud)

c# concurrency multithreading db4o client-server

8
推荐指数
1
解决办法
2115
查看次数

Indy写入缓冲/高效TCP通信

我知道,我问了很多问题......但是作为一个新的delphi开发人员,我一直在讨论所有这些问题:)

使用印10.为了使通信效率这一个与TCP通信交易,我编写一个客户端操作请求作为单个字节(在大多数情况下,接着,当然其他数据字节,但在这种情况下,只有一个单一的字节).问题是

var Bytes : TBytes;
...
SetLength (Bytes, 1);
Bytes [0] := OpCode;
FConnection.IOHandler.Write (Bytes, 1);
ErrorCode := Connection.IOHandler.ReadByte;
Run Code Online (Sandbox Code Playgroud)

不立即发送该字节(至少不调用服务器执行处理程序).如果我将'1'更改为'9',例如一切正常.我假设Indy缓冲了输出字节,并尝试禁用写缓冲

FConnection.IOHandler.WriteBufferClose;
Run Code Online (Sandbox Code Playgroud)

但它没有帮助.如何发送单个字节并确保立即发送?并且 - 我在这里添加另一个小问题 - 使用indy发送整数的最佳方法是什么?不幸的是,我无法在TIdTCPServer的IOHandler中找到像WriteInteger这样的函数......而且

WriteLn (IntToStr (SomeIntVal))
Run Code Online (Sandbox Code Playgroud)

对我来说似乎不是很有效率.是否有所作为我是否使用多个写命令行或字节数组一起收拾东西,并发送一次?

谢谢你的回答!

编辑:我补充说,我使用的是印地10日以来似乎有关于读了重大变化,写程序的提示.

delphi performance tcp client-server indy

8
推荐指数
1
解决办法
1万
查看次数

多线程服务器中的Monitor.Wait/Pulse竞争条件

我在多线程TCP服务器中遇到了互锁Monitor.Wait和Monitor.Pulse的问题.为了演示我的问题,这是我的服务器代码:

public class Server
{
    TcpListener listener;
    Object sync;
    IHandler handler;
    bool running;

    public Server(IHandler handler, int port)
    {
        this.handler = handler;
        IPAddress address = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
        listener = new TcpListener(address, port);
        sync = new Object();
        running = false;
    }

    public void Start()
    {
        Thread thread = new Thread(ThreadStart);
        thread.Start();
    }

    public void Stop()
    {
        lock (sync)
        {
            listener.Stop();
            running = false;
            Monitor.Pulse(sync);
        }
    }

    void ThreadStart()
    {
        if (!running)
        {
            listener.Start();
            running = true;
            lock (sync)
            {
                while (running)
                { …
Run Code Online (Sandbox Code Playgroud)

c# multithreading client-server

8
推荐指数
1
解决办法
2765
查看次数

如何同步服务器端和客户端代码?

我在软件工程中一直在学习(和教学)的东西是代码重复是所有邪恶的根源.另一方面,我发现很难解释这个概念应该如何应用于Web应用程序的开发.

请允许我澄清一下......输入和数据验证可以是Web应用程序的重要组成部分.有时这种验证可能非常复杂.例如,我在拼图编辑器上工作,验证包括检查操作或移动是否有效.然后必须检查非平凡的规则.

当然,验证必须在服务器端完成,以确保存储数据的一致性和质量.但是,必须对客户端进行验证以确保顺畅的用户体验.

在大多数情况下,客户端和服务器端代码是用不同的语言编写的(即javascript/Python),因此验证代码必须编写两次.但是,根据我对GWT/Java(双方都是Java)的唯一体验,我发现可以重用大部分验证代码.这似乎使一切变得更容易:维护,重构,调试......

所以我的问题是:在客户端和服务器端语言不同的项目中,如何管理与代码重复相关的问题?

javascript gwt client-server

8
推荐指数
1
解决办法
1882
查看次数

Clojure中的TCP"客户端"示例!

我试图使用TCP套接字来通信服务器和一堆客户端之间的共享状态.我正在使用clojure.contrib中的"Server-Socket"作为服务器.这很好用,我可以用其他工具与服务器通信.

我很难在Clojure中找到客户端套接字使用的好例子.

我实际上来回"打印"和"读取"状态向量.

什么是"Clojure"方式做客户端?

client-server clojure

8
推荐指数
2
解决办法
5662
查看次数

如何在Android中从服务器检索数据时滚动更新ListView?

目前,我正在使用AsyncTask来处理Http连接并以JSON格式检索数据.
加载所有数据是微不足道的,但它消耗了太多时间,所以我决定使用LIMIT OFFSET(mysql)一次切换到加载10个项目.
接下来,我onScroll为列表视图设置事件,以便AsyncTask每次用户滚动时创建一个新事件.但是,从我读到的,AsyncTask存储在一次限制5个线程的线程池中,所以我不确定这是一个正确的方法.我是客户/服务器应用程序的新手,所以我可以在这个问题上给我一个建议吗?任何相关的文章,文档将不胜感激.

android client-server http android-asynctask

8
推荐指数
1
解决办法
1万
查看次数

如何将android客户端连接到我的笔记本电脑内的Apache服务器(php)的localhost?

我正在尝试创建能够通过wifi连接将数据发送到我的笔记本电脑Apache服务器和MySQL数据库的Android应用程序.我使用三星galaxy tab 10.1作为我的移动设备.我使用的协议是HttpGet或HttpPost.我使用XAMPP(使用Apache和SQL)来处理服务器并处理php.但是,由于android无法从笔记本电脑中检测到adhoc网络,我使用虚拟路由器(用于窗口7)创建虚拟接入点并使平板电脑能够连接到我的笔记本电脑.但问题是:

  1. 在我的应用程序(client-android)中,httpget或httppost所在的url?我的笔记本电脑中的localhost- 127.0.0.1或android 10.0.0.1中的localhost?或虚拟路由器的IP地址?

  2. 那么,如果我想从android访问localhost(laptop-Apache)来调用php来运行?哪个港口?哪个ip地址/ url我需要放在Android应用程序(httpget)?我需要在httpconfig中为XAMPP修改任何内容吗?

php apache xampp android client-server

8
推荐指数
1
解决办法
2986
查看次数

如何使用套接字处理连接到服务器的多个客户端?

我有一个Android应用程序,需要让多个设备连接.一个设备应该充当组所有者,并向所有客户发出指令以执行特定的操作.我认为它可以与一个玩家是主机的无线掌上游戏相媲美.

我有几个问题所以我会尽量保持简洁.即使对第一个问题的回答也会有所帮助.

首先,我使用套接字成功配对了单个服务器和单个客户端电话.我使用Android的Wi-Fi Direct技术(这里描述)做到了这一点.本教程很有帮助,但遗憾的是并不十分彻底,特别是在描述一对多连接时.找到对等列表后,可以打开套接字连接.我能够使用服务器的线程连接两个设备(使用此示例),如下所示:

public class ServerThread implements Runnable {

        public void run() {
             (Code...)
             client = serverSocket.accept();
             (...other code here.)
        }
}
Run Code Online (Sandbox Code Playgroud)

按下按钮后会创建一个客户端(我想,仍然试图了解我的修改后的代码):

public class MusicClientThread implements Runnable {
     Socket socket = new Socket(serverAddr, port);
     while (connected) {
          //(Other code here.)
          while ((line = in.readLine()) != null) {
          //While there are still messages coming
          }
     }
     socket.close();
     //(Other code here too.)
}
Run Code Online (Sandbox Code Playgroud)

所以我想我的第一个问题是:如何让更多客户连接?我的ServerThread指的是上面的单个客户端变量,所以我看不出如何允许变量(我的应用程序的目标是2到10个用户),我也不知道区分所有不同客户端的正确方法.我唯一的猜测是我会使用每部手机的唯一IP地址.

我的第二个问题是,一旦我与多个客户/同行建立了连接,我将如何正确地发送和接收指令?目前,我的单个服务器等待指令,并在收到指令后发出响应指令.我需要它,以便服务器可以使用按钮按钮从头开始发送指令,并且这些结果在客户端设备上可见.

我希望我已经把一切都搞清楚了!

java sockets android client-server wifi-direct

8
推荐指数
1
解决办法
2万
查看次数

Date.js vs Moment.js(和服务器端格式化)

我一直在我的项目中使用Date.js,并且最近读了一篇文章,说明了.js是优越的.

但是,我很难相信它只是因为它无法解析像"从现在起5天"到实际日期之类的输入.

我个人的愿望/要求就是这样

  1. 我可以采用各种输入(文本字段)并将其作为格式正确的日期提交.
  2. 我可以采用格式正确的日期并将它们输出为友好的(或者只是以不同的方式解析它们).

Date.js同时做到了.Moment.js似乎只做#2 ......

我错过了什么,或者我仍然很酷地使用Date.js?

另外......对于我的rails项目.格式化服务器端或客户端是否更好?即.我有一些我想根据相对日期条件格式化的东西.(如果从现在起10天后加上一个类,或者现在> 0天以后添加一个类)...客户端/服务器端日期解析/操作的优缺点?

client-server datejs ruby-on-rails-3 momentjs

8
推荐指数
1
解决办法
4841
查看次数

如何在没有频繁的ajax请求的情况下从客户端获取更新?

在我的项目中,有私人聊天和消息通知等功能.消息通知让我们知道是否有任何新的未读消息.


为实现这一目标,我想到的想法是

就像在client- server模型中一样,服务器应该监听新请求.就像那样,我认为应该有一些机制来监听服务器以获取有关新消息的信息.因为我知道ajax,所以我使用的ajax请求间隔为2秒.

在chrome中检查它时,ajax请求如下所示. 在chrome的网络部分下的Ajax请求

但我后来认为,如果这是唯一的想法,StackOverflow应该使用相同的技巧,因为它们异步更新通知/投票信息.

在chrome中检查他们的ajax请求,它完全是空白的.

我需要知道如何在不使用频繁的ajax请求的情况下实现它(这将增加服务器上的负载).
使用最有效技术的简单示例对于学习非常有用.

ajax jquery client client-server server

8
推荐指数
1
解决办法
1608
查看次数