我最近要做个发短信的服务,用wcf做的.问题是 移动提供的服务 不能高并发 每秒只能6个
我这边现在的想法是用队列,页面请求的 加入队列现在比较菜的问题是 我怎么触发 发送队列的msg
是一直死循环check这个队列吗? 
有什么好的想法?
求指导,本人小菜

解决方案 »

  1.   

    ArrayList li=new ArrayList();public void check(){
    while(True)
    {
    if(li.count>0){
    取出li[0]发送
    发送成功后移除li[0]
    }}
    }上面这些代码发到一个方法用线程调用,然后li可以定义成静态全局变量,从其他地方不断往里面添加代码是手写的,有错误请不要喷。。
      

  2.   

    使用ObservableCollection<T>
    当集合元素增加减少的时候,触发CollectionChanged事件,添加你的代码。
      

  3.   


    你所说的队列具体是.net的什么类型对象呢?
      

  4.   

    这个描述很含混不清,看不太懂含义。移动提供一个网关接口方法,你的并发程序完全可以调用啊,调用它的时候写个lock(gateway){
    ...
    }语句就行了。而“每秒6个”具体是什么限制呢?是网关会抛出异常,还是等待?如果是等待,那么(最简单地)你无需做任何事情。如果是抛出异常,那么你可以在异常后重试;或者自己保存最近6次发送消息的时间(放在一个数组中),如果发送过快则可以插入 Sleep(...) 语句。如果是为了服务宕机时仍然可靠,那么可能需要MSMQ或者数据库来缓存消息。这是另外的问题(通常也不需要)。
      

  5.   

    可把要发送的号码用类似list之类的对象保存起来。同时通过新建一个线程从list中取号码,然后向该号码发送消息,每发一次线程睡眠1000/6毫秒。发完一个号码后把该号码从list中移除掉。注意多线程对list操作时,要将list锁住,防止数据紊乱