原标题:Web架构(二)PHP Socket与Java ServerSocket交互
Web架构(二)PHP Socket与Java ServerSocket交互
现在流行微服务,SOA服务治理,RPC.都是基于某种协议,进行数据交换.
前边使用php进行数据渲染,调用后端的接口获取数据,前后端分离比较灵活,中间的数据交换协议要统一一致起来。前端不用关心后端是什么语言,只需要通过约定的协议调用接口即可。
本文讲述Java使用服务器端Socket提供服务,PHP使用Socket请求服务端,进行数据交互。
效果: php页面
mysql数据库
java控制台
代码
Server.java
package cn .pangpython.mybase.rpc;import cn .pangpython.mybase.dbop.MyBatis;import cn .pangpython.mybase.dbop.User;import java .io.* ;import java .net.ServerSocket;import java .net.Socket;public class Server { public static void main(String[] args) throws IOException { //创建服务端socket 使用 8089端口 ServerSocket ss = new ServerSocket( 8089) ;System .out.println( "启动服务器....") ;while (true) { //开启监听 Socket s = ss .accept() ;System .out.println( "客户端:"+ s .getInetAddress() .getLocalHost() + "已连接到服务器") ;BufferedReader br = new BufferedReader(new InputStreamReader(s .getInputStream())) ;//读取客户端发送来的消息 String mess = mess = br .readLine() ;System .out.println( "客户端发送的信息:"+ mess) ;// while ((mess = br .readLine())!= null){// } //根据传过来的userid去数据库查询user,返回 String userId = mess .substring(mess .indexOf( "=") + 1) ;System .out.println( "useris:"+ userId) ;MyBatis myBatis = new MyBatis() ;int uid = Integer .parseInt(userId) ;User user = myBatis .getUser(uid) ;//返回数据 if (user != null) { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s .getOutputStream())) ;bw .write( "
User:"+ user .toString() + "
n") ;bw .flush() ;bw .close() ;} br .close() ;s .close() ;} }}index.php
<?php //创建socket$socket= socket_create(AF_INET, SOCK_STREAM, SOL_TCP);socket_connect($socket, '127.0.0.1', 8089);//要发送的内容$send= <<";//发送给服务器数据socket_write($socket, $send, strlen($send));//接受服务器返回的数据while($str= socket_read($socket, 1024)){ echo'receive:'; echo$str;}socket_close($socket);
全部代码:
https://github.com/pangPython/mybase
数据库操作使用mybatis。
后面会学习dubbo的架构。返回搜狐,查看更多
责任编辑: