java-php通信

java-php通信,java,php,serversocket,Java,Php,Serversocket,我编写了一个客户端java应用程序,它通过http与php服务器通信。我需要在java(客户端)端实现一个侦听器来响应php服务器发出的请求。目前,java应用程序正在访问服务器上每分钟更新一次的文本文件 这一切都很顺利,但现在客户端java应用程序的数量正在上升,这个原始系统开始崩溃 改变这一点的最佳方式是什么?我在java客户端应用程序上尝试了一个java ServerSocket侦听器,但无法使其工作。我在完成通讯时遇到困难。web上的所有示例都使用localhost作为ip地址示例,我的

我编写了一个客户端java应用程序,它通过http与php服务器通信。我需要在java(客户端)端实现一个侦听器来响应php服务器发出的请求。目前,java应用程序正在访问服务器上每分钟更新一次的文本文件

这一切都很顺利,但现在客户端java应用程序的数量正在上升,这个原始系统开始崩溃

改变这一点的最佳方式是什么?我在java客户端应用程序上尝试了一个java ServerSocket侦听器,但无法使其工作。我在完成通讯时遇到困难。web上的所有示例都使用localhost作为ip地址示例,我的php服务器是远程托管的

我是否需要获取客户端机器的ip地址并将其发送到php服务器,以便php知道将消息发送到哪里?下面是java代码。。。这是所有的网络

public class MyJavaServer
{

    public static void main(String[] args)
    {


        int port = 4444;
        ServerSocket listenSock = null; //the listening server socket
        Socket sock = null;          //the socket that will actually be used for communication

        try
        {

            System.out.println("listen");
            listenSock = new ServerSocket(port);

            while (true)
            {

                sock = listenSock.accept(); 

                BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream()));
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
                String line = "";
                while ((line = br.readLine()) != null)
                {
                    bw.write("PHP said: " + line + "\n");
                    bw.flush();
                }

                //Closing streams and the current socket (not the listening socket!)
                bw.close();
                br.close();
                sock.close();
            }
        }
        catch (IOException ex)
        {
            System.out.println(ex);
        }
    }
}
。。。这里是php

$PORT = 4444; //the port on which we are connecting to the "remote" machine
$HOST = "ip address(not sure here)"; //the ip of the remote machine(of the client java app's computer???

$sock = socket_create(AF_INET, SOCK_STREAM, 0) 
        or die("error: could not create socket\n");

$succ = socket_connect($sock, $HOST, $PORT) 
        or die("error: could not connect to host\n");

$text = "Hello, Java!\n"; //the text we want to send to the server

socket_write($sock, $text . "\n", strlen($text) + 1) 
        or die("error: failed to write to socket\n");

$reply = socket_read($sock, 10000, PHP_NORMAL_READ)
        or die("error: failed to read from socket\n");

echo $reply;
这根本不起作用。java应用程序侦听,但php脚本从不连接

还有,这是满足我需求的最好方法吗??
谢谢。

如果php服务器可以连接到java客户机,那么您包含的代码就可以工作。在您的例子中,这是通过web实现的,这意味着java客户机应该有一个可供公众访问的IP。一旦有了它,将该IP分配给$HOST,代码就会正常运行


假设没有客户机可以拥有公共IP,我认为最好的方法是让java客户机使用HTTP请求以请求-应答方式与PHP服务器对话。java客户端就像web浏览器一样,发送HTTP请求并接收包含java客户端所需数据的HTTP回复。当客户端数量上升到PHP服务器无法处理的水平时,可以将其放大。虽然我自己还没有这样的经验,但现在升级PHP服务器并不少见。

您是否检查过是否有防火墙阻止传入的请求?这是我的家用计算机。我正在通过一个普通的无线路由器。顺便说一句,如果防火墙要杀死它,那么它可能是一个错误的方向。我的客户不懂技术,我需要为用户提供一个简单的解决方案。你可能有防火墙阻止访问。它可能位于电缆调制解调器级别和/或更上游。是的,防火墙很可能是你设计中的一个障碍。你应该重新考虑一下设计。不要将数据推送到客户端,而是让客户端轮询服务器以获取更新。这就是我现在所拥有的。客户端每隔20秒轮询一个文本文件,php服务器使用cron更新该文件。如果有1000多个客户,这会起作用吗?我不知道。做一些压力测试来回答这个问题。存在用于此类分析的工具。为了简单地针对单个url测试多个线程,请使用
ab
(Apache基准测试)。对于更复杂的负载测试,请使用JMeter。