找回密码
 加入
搜索
查看: 2016|回复: 12

遇到难题了 请高手解决

[复制链接]
发表于 2009-10-17 15:52:12 | 显示全部楼层 |阅读模式
我想写个网吧点歌系统,客户端点歌 服务端播放,

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

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

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

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

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

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

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

不知道有没有什么好方法能解决这个问题   拜托各位了 给个思路也行啊  先谢谢了
发表于 2009-10-17 15:55:45 | 显示全部楼层
插入正在运行中的程序吗?多进程(或者多线程),大概方向吧,不是很熟,帮不上了
发表于 2009-10-17 20:11:04 | 显示全部楼层
建议系统可以添加交互的文件,例如 Ini 文件中标识当前客户端点歌 服务端状态,通过写入新歌数量及其信息实现,类似WIndows配置文件的应用。
发表于 2009-10-17 20:13:14 | 显示全部楼层
在代码注意客户端点歌 服务端状态在消息处理上的切换和判断。
 楼主| 发表于 2009-10-18 08:49:05 | 显示全部楼层
三楼 RobertLi  的方法貌似很简单,但是怎么让点播的歌曲一直循环下去呢、 因为我最多让服务端同时接受5首歌曲  避免了点歌的人太多了  它一直播放  那后期点歌的就听不到自己点的歌曲了,如何让INI里这5首歌来回换呢
 楼主| 发表于 2009-10-18 08:55:24 | 显示全部楼层
RobertLi   4楼的方法具体怎么实现  能详细说明下吗
发表于 2009-10-18 11:13:57 | 显示全部楼层
没有多线程的话,你这些功能都是不能实现的.我到现在也没找到AU3的多线程实现方法.
刚好我也在写类似软件.
这类软件应该属于C/S软件.当然可能有其它结构,但使用起来不方便也不直观.
C/S 离不开SOCKET.
服务端呢. 启动后必须创建SOCKET,
并开启监听线程.
有客户端连接时,再开启1线程来处理客户端通讯.
所有的客户端线程通讯后的结果,交给工作线程,来处理如播放音乐,和更新UI.
光这些就基本无法实现了,就算实现了,你还会发现的服务端非常的脆弱.
如果有客户端不断的连接断开连接断开.你的服务端就崩溃了.
例如使用IE访问你的服务端端口,然后按F5刷新.几秒后,服务端崩溃.
所以了,还得用到线程池.这些对于一个解释型的语言来说,是不合适的.

分析后的结果:AU3暂时不适合做这类软件,除非作者更新编译方式,不在是解释型.
如果非要做,还有1种方法,前面提到的.
多进程:
服务端开1进程来访问数据库某表来判断是否有客户呼叫或点歌.
1进程来处理呼叫1进程来处理点歌.
客户端要点歌是将歌曲信息写入数据库某表.
这样数据库从另一个方面帮你实现了很多功能.可以用(mssql或mysql等)
发表于 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=
[Command]
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完成监控和点歌!
发表于 2009-10-18 11:49:43 | 显示全部楼层
客户端点歌 服务端端定时检测,同时通过写入和读取配置信息完成监控哦!
发表于 2009-10-18 11:51:55 | 显示全部楼层
给个名称,伪线程!
发表于 2009-10-18 11:55:35 | 显示全部楼层
给个名称:伪线程仿数据库法
难点在:在多用户同时读写注意写冲突处理!
 楼主| 发表于 2009-10-18 15:28:15 | 显示全部楼层
呵呵 有空试下看
发表于 2009-10-24 16:17:35 | 显示全部楼层
不需要,把播放器和服务器端分离即可
服务端收到客户端点歌后,再启动播放器播放歌曲,而不是用服务端来播放
这样就可以继续处理客户端的请求了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 04:41 , Processed in 0.079145 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表