bbip 发表于 2009-10-17 15:52:12

遇到难题了 请高手解决

我想写个网吧点歌系统,客户端点歌 服务端播放,

现在点歌和播放都完成了 有个问题就是 当服务端播放歌曲的时候 就不能再接受客户端点歌了

非要等歌曲播放完服务端空闲了才能再接受客户端点歌   

而我本来的意愿是服务端能接受客户端点3-5首歌存到播放列表

超出5首的能给客户端发个提示 让他稍后再点播

哎~~~ 可惜目前服务端播放歌曲的时候 不接受任何操作..

后来我想了个办法 另外写个程序专门播放歌曲 让服务端空闲出来

理论上我认为可行 实际结果还是不行

不知道有没有什么好方法能解决这个问题   拜托各位了 给个思路也行啊先谢谢了

netegg 发表于 2009-10-17 15:55:45

插入正在运行中的程序吗?多进程(或者多线程),大概方向吧,不是很熟,帮不上了

RobertLi 发表于 2009-10-17 20:11:04

建议系统可以添加交互的文件,例如 Ini 文件中标识当前客户端点歌 服务端状态,通过写入新歌数量及其信息实现,类似WIndows配置文件的应用。

RobertLi 发表于 2009-10-17 20:13:14

在代码注意客户端点歌 服务端状态在消息处理上的切换和判断。

bbip 发表于 2009-10-18 08:49:05

三楼 RobertLi的方法貌似很简单,但是怎么让点播的歌曲一直循环下去呢、 因为我最多让服务端同时接受5首歌曲避免了点歌的人太多了它一直播放那后期点歌的就听不到自己点的歌曲了,如何让INI里这5首歌来回换呢

bbip 发表于 2009-10-18 08:55:24

RobertLi   4楼的方法具体怎么实现能详细说明下吗

akmm88 发表于 2009-10-18 11:13:57

没有多线程的话,你这些功能都是不能实现的.我到现在也没找到AU3的多线程实现方法.
刚好我也在写类似软件.
这类软件应该属于C/S软件.当然可能有其它结构,但使用起来不方便也不直观.
C/S 离不开SOCKET.
服务端呢. 启动后必须创建SOCKET,
并开启监听线程.
有客户端连接时,再开启1线程来处理客户端通讯.
所有的客户端线程通讯后的结果,交给工作线程,来处理如播放音乐,和更新UI.
光这些就基本无法实现了,就算实现了,你还会发现的服务端非常的脆弱.
如果有客户端不断的连接断开连接断开.你的服务端就崩溃了.
例如使用IE访问你的服务端端口,然后按F5刷新.几秒后,服务端崩溃.
所以了,还得用到线程池.这些对于一个解释型的语言来说,是不合适的.

分析后的结果:AU3暂时不适合做这类软件,除非作者更新编译方式,不在是解释型.
如果非要做,还有1种方法,前面提到的.
多进程:
服务端开1进程来访问数据库某表来判断是否有客户呼叫或点歌.
1进程来处理呼叫1进程来处理点歌.
客户端要点歌是将歌曲信息写入数据库某表.
这样数据库从另一个方面帮你实现了很多功能.可以用(mssql或mysql等)

RobertLi 发表于 2009-10-18 11:46:50

引进多个配置文件,
方案一:创建Client1Pipe.Ini   ClientXPipe.Ini        ExchangePipe.Ini        ServicePipe.ini
Client1Pipe.Ini 中配客户端点歌信息配置名称及其序号
【Current】
SongName=XXX
SongItem=XXX

ExchangePipe.Ini中配以下信息,记录当前的点歌台和客户端运行状态信息
【System】
State0=Run|NewSongs
State1=Run|NewSongs
SongName=XXXXXX1|XXXXXXX2
SongItem=

State1= Run|Init|Pause|Stop|Complet
State0= Run|Init|Pause|Stop|Complet       

ServicePipe.Ini中配以下信息,记录当前的点歌台运行状态信息和歌曲信息
【TestItem】
State=SongOK/SongFAIL/SongNORMAL/NOSong/SongINIT/SongSTART/SongPAUSE/SongSTOP/SongRUN/ClientRUN/RUNCOMPLETE
Type=0/1
NumSong=0
SongItemNum=0
通过一个定时1秒的Timer检测Exchange完成监控和点歌!

RobertLi 发表于 2009-10-18 11:49:43

客户端点歌 服务端端定时检测,同时通过写入和读取配置信息完成监控哦!

RobertLi 发表于 2009-10-18 11:51:55

给个名称,伪线程!

RobertLi 发表于 2009-10-18 11:55:35

给个名称:伪线程仿数据库法
难点在:在多用户同时读写注意写冲突处理!

bbip 发表于 2009-10-18 15:28:15

呵呵 有空试下看

kleist 发表于 2009-10-24 16:17:35

不需要,把播放器和服务器端分离即可
服务端收到客户端点歌后,再启动播放器播放歌曲,而不是用服务端来播放
这样就可以继续处理客户端的请求了
页: [1]
查看完整版本: 遇到难题了 请高手解决