‘壹’ 即时聊天软件的原理,Web网页的聊天又是怎么实现的呢
这种即时聊天的需要常连接来实现,比较典型的有php的Workerman和nodejs的socket.io,
原理是这样的。以socket.io为例,访客端发送消息给nodejs[room(房间可以是域名加公司编号),uid(访客id可以是浏览器内核或者代理加ip加操作系统生成),workerid(数据库对应客服的id),type(消息类型 可以是sendmsg,getmsg。。。)],监听到事件后在房间内广播进行推送给对应的workerid进行渲染显示在页面。在发送信息的同时写入到数据库。
nodejs就是一个传话的人但是24小时监听的,逻辑基本都在nodejs中处理。
‘贰’ 用php socket制作聊天室。
何必自讨苦吃呢?php 制作聊天室,关键技术是页面局部自动刷新。
通过php ajax技术,就可以完美的达到你的要求。
具体原理如下,在网页聊天框,被ajax调用,ajax传递参数一个php页面,这个页面同时调用数据库,将数据库中新内容返回到页面聊天框中。
然后你可以自己调时间了,是20秒访问一次数据库,还是10秒访问一次数据库。
至于php的socket技术,说实话,我接触php 8年了,没碰过。
我想,关键不是用什么技术,关键是解决问题。
希望对你有用。
‘叁’ PHP的Socket怎么进行服务端与客户端的相互通信
服务器提供
数据缓冲区
,并提供一种用户识别机制。以此来给聊天用户双方发送相应的信息。
看似用户与用户之间的通信实质上是用户在与服务器通信。
我的一点理解
‘肆’ php 怎么实现即时聊天功能 - PHP进阶讨论
忘记说了 ... LS 的 DEMO 仅支持 IE ...Firefox 数据接收正常 ... 但是不处理收到的 javaScript ...不是那个不能同时开两个的问题 ... 未找到解决办法中 ...
‘伍’ php开发即时通讯使用的什么原理
最简单的说,就是ajax定时刷新,比如间隔10秒。有新数据,就反馈到前台,没新数据就等待下一次刷新。
但是真正在应用中需要考虑到消息及时性、服务器压力等等。
可以用comet进行设计
node.js 、socket
反正当你真的要自己开发一个im系统应用到自己的项目中的话,是一个很大的工程
‘陆’ 想用php和socket做个聊天程序,请问怎么实现试试刷新
你网络一个php+socket的例子,跑通了你就不会这样说了,在socket面前ajax就是垃圾
‘柒’ PHP SOCKET 技术研究
今天试着写一个
PHP
与
C
语言通过socket通讯的程序,看过PHP手册,发现有好几种方式可以建立socket
客户端.
1、通过
fsockopen()
建立socket连接,然后用
用fputs()
发送消息,用
fgets()
接收消息。
2、通过
socket_create()
建立
socket
连接,然后用
socket_send()
or
socket_write()
发送消息,用
socket_recv()
or
socket_read()
发送消息。
很奇怪,我在手册上看到了这样一段话"本扩展模块是实验性的。该模块的行为,包括其函数的名称以及其它任何关于此模块的文档可能会在没有通知的情况下随
PHP
以后的发布而改变。我们提醒您在使用本扩展模块的同时自担风险。"
看来
php4.0
socket通讯还不是完全稳定。
今天我写的客户端要与服务端做两次通讯,我用上面这个方法都写了一个客户端程序,发现当仅仅就一次通讯的时候,也就是PHP客户端发送一次消息,然后接收返回消息,就关闭连接。这两种方法都能正确快速的实现功能,但当做两次通讯时,却有明显的差别,第一种方法第一次通讯特别快就结束了,这个我可以通过服务端的输出看出来,但是第二次通讯要等上好几分钟才能结束,我试了好几次都这样,我不太清楚我的程序哪里出错了,还是这个方式连接就是有问题,但是第二种方法做这两次通讯却很快,正确!完成的非常的。
最后我根据
第二种情况写了一个
class
//////////////////////////////
File
Description
//////////////////////////////////////////
//
Class
Name
:
socket
//
Version
:
V1.0
//
Functional
Outline
:
create
socket,and
send
message
to
server
//
Revision
history
:
2004/12/15
First
version
created
//
Current
:
2004/12/15
Liu
Yongsheng
//////////////////////////////////////////////////////////////////////////////////////////
class
socket{
var
$socket;
//socket
句柄
var
$sendflag
=
">>>";
var
$recvflag
=
"<<<";
var
$response;
var
$debug
=
1;
function
socket($hostname,$port){
$address
=
gethostbyname($hostname);
$this->socket
=
socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
$result
=
socket_connect($this->socket,$address,$port);
if($this->debug
==
1){
if
($result
<
0)
{
echo
"socket_connect()
failed.\nReason:
($result)
"
.
socket_strerror($result)
.
"<br>";
}
else{
echo
"connect
OK.<br>";
}
}
}
function
sendmsg($msg){
socket_write($this->socket,$msg,strlen($msg));
$result
=
socket_read($this->socket,100);
$this->response
=
$result;
if($this->debug
==
1){
printf("<font
color=#CCCCCC>%s
$msg</fon><br>",$this->sendflag);
printf("<font
color=blue>%s
$result</font><br>",$this->recvflag);
}
return
$result;
}
function
close(){
socket_close($this->socket);
}
}
‘捌’ php 怎么实现即时即时通讯
php实现实时通信一般有两种方式:socket或comet。
socket是比较好的解决方案,问题在于不是所有的浏览器都兼容,服务器端实现起来也稍微有点麻烦。
comet(基于HTTP长连接的"服务器推")实现起来更加方便,而且兼容所有的浏览器。
comet也有好几种实现方式,如iframe, http long request等。
‘玖’ 请问PHP能否实现即时通讯
可以的,但是运行的地方不能是虚拟主机,因为那些一般只有FTP文件管理+WEB控制面板,这种条件下基本上无法实现的,即使实现了,效果也不好
‘拾’ java socket 和php 怎样实现聊天功能,求帮忙
[java]
view
plain
<span
style="font-size:16px;">package
demo.net;
import
java.io.DataInputStream;
import
java.io.DataOutputStream;
import
java.io.IOException;
import
java.net.ServerSocket;
import
java.net.Socket;
import
java.util.Scanner;
/**
*
模拟qq聊天功能:
实现客户端与服务器(一对一)的聊天功能,客户端首先发起聊天,输入的内容在服务器端和客户端显示,
*
然后服务器端也可以输入信息,同样信息也在客户端和服务器端显示
*/
//
服务器类
public
class
ChatServer
{
private
int
port
=
8189;//
默认服务器端口
public
ChatServer()
{
}
//
创建指定端口的服务器
public
ChatServer(int
port)
{
this.port
=
port;
}
//
提供服务
public
void
service()
{
try
{//
建立服务器连接
ServerSocket
server
=
new
ServerSocket(port);
//
等待客户连接
Socket
socket
=
server.accept();
try
{
//
读取客户端传过来信息的DataInputStream
DataInputStream
in
=
new
DataInputStream(socket
.getInputStream());
//
向客户端发送信息的DataOutputStream
DataOutputStream
out
=
new
DataOutputStream(socket
.getOutputStream());
//
获取控制台输入的Scanner
Scanner
scanner
=
new
Scanner(System.in);
while
(true)
{
//
读取来自客户端的信息
String
accpet
=
in.readUTF();
System.out.println(accpet);
String
send
=
scanner.nextLine();
System.out.println("服务器:"
+
send);
//
把服务器端的输入发给客户端
out.writeUTF("服务器:"
+
send);
}
}
finally
{//
建立连接失败的话不会执行socket.close();
socket.close();
}
}
catch
(IOException
e)
{
e.printStackTrace();
}
}
public
static
void
main(String[]
args)
{
new
ChatServer().service();
}
}
</span>