小编ANi*_*sus的帖子

通过Websocket发送WebRTC MediaStream(通过HTTP/Websocket进行RTP)

除其他外,WebRTC用于实时浏览器到浏览器媒体通信,但在我的情况下,它将用于浏览器到服务器的音频通信.

根据我收集的信息,使用RTP over UDP传输MediaStream.

除了用于信令的协议之外,这将需要至少两个额外的端口,这是我想要避免的.

在WebRTC中,是否有可能在Websocket上使用RTP而不是在UDP上使用RTP,这样我只需要使用端口80或443?

rtp websocket webrtc

8
推荐指数
1
解决办法
1万
查看次数

在 INSERT 语句中将 OUTPUT INTO 与 from_table_name 一起使用

Microsoft 的 OUTPUT Clause 文档表示您可以在 OUTPUT 子句的列名中使用from_table_name 。

有两个例子:

是否也可以在INSERT 语句中使用它?

INSERT INTO T ( [Name] )
OUTPUT S.Code, inserted.Id INTO @TMP -- The multi-part identifier "S.Code" could not be bound.
SELECT [Name] FROM S;
Run Code Online (Sandbox Code Playgroud)

使用表变量的失败示例

-- A table to insert into.
DECLARE @Item TABLE (
    [Id] [int] IDENTITY(1,1),
    [Name] varchar(100)
);
-- A table variable to store inserted Ids …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server output-clause

8
推荐指数
1
解决办法
3264
查看次数

C是否舍入浮点常数

关于Go中浮点精度的问题使我想知道C如何处理问题.

使用C中的以下代码:

float a = 0.1;
Run Code Online (Sandbox Code Playgroud)

a具有最接近的IEEE 754二进制表示:

00111101110011001100110011001101 (Decimal:  0.10000000149011612)
Run Code Online (Sandbox Code Playgroud)

或者只是将它裁剪成:

00111101110011001100110011001100 (Decimal:  0.09999999403953552)
Run Code Online (Sandbox Code Playgroud)

或者根据编译器/平台的不同而不同?

c floating-point floating-point-precision

7
推荐指数
1
解决办法
299
查看次数

websocket发送/接收是否是线程安全的(去常规安全)?

在GO中编写websocket服务器时(在我的情况下使用JSON编解码器),是否可以安全地使用两个不同的Go例程来处理在同一连接上发送和接收数据?

由于websocket.JSON.Receive暂停和等待接收数据,我认为处理数据发送的单独Go例程将是一个有效的解决方案,除非在同一连接上不能同时发送/接收.

那么,下面的工作示例是不良做法吗?

package main

import (
    "fmt"
    "net/http"
    "code.google.com/p/go.net/websocket"
)

const queueSize = 20

type Input struct {
    Cmd    string
}

type Output struct {
    Cmd    string
}

func Handler(ws *websocket.Conn) {

    msgWrite := make(chan *Output, queueSize)
    var in Input

    go writeHandler(ws, msgWrite)

    for {

        err := websocket.JSON.Receive(ws, &in)

        if err != nil {
            fmt.Println(err)
            break
        } else {
            msgWrite <- &Output{Cmd: "Thanks for your message: " + in.Cmd}
        }
    }
}

func writeHandler(ws *websocket.Conn, out chan …
Run Code Online (Sandbox Code Playgroud)

concurrency go websocket

6
推荐指数
1
解决办法
3839
查看次数

使用time.Format时的本地化

time包中,格式化time.Time变量时,输出将使用未导出的[]字符串切片中定义的周和月的英文名称.

如何使用不同的语言本地化字符串(希望仍然使用Format())?

例:

fmt.Println(time.Now().Format("Mon 2 January 2006"))
Run Code Online (Sandbox Code Playgroud)

输出:

2014年1月28日星期二

期望的输出:

2014年1月28日,Januari

操场

time localization go

6
推荐指数
1
解决办法
812
查看次数

删除重复后的行

我有一个用户登录和注销邮票列表.遗憾的是,LOGIN条目可能并不总是后跟LOGOUT条目.
我希望在[event_date]命令时删除与前一行具有相同[event][user_id]的任何行. 有关如何执行此操作的建议吗?

示例表

CREATE TABLE #LOG (
    [id] int IDENTITY(1,1),
    [user_id] int,
    [event] varchar(50),
    [event_date] datetime
);
INSERT INTO #LOG ([user_id], [event], [event_date])
SELECT 1,'LOGIN',{ts '2010-12-15 15:31:59'}
UNION ALL SELECT 1,'LOGOUT',{ts '2010-12-15 15:32:55'}
UNION ALL SELECT 1,'LOGIN',{ts '2010-12-15 15:38:04'}
UNION ALL SELECT 1,'LOGOUT',{ts '2010-12-15 15:38:17'}
UNION ALL SELECT 1,'LOGOUT',{ts '2010-12-15 15:38:45'} -- Delete
UNION ALL SELECT 2,'LOGIN',{ts '2010-12-15 16:59:39'}
UNION ALL SELECT 2,'LOGOUT',{ts '2010-12-15 17:00:08'}
UNION ALL SELECT 2,'LOGOUT',{ts '2010-12-15 17:00:39'} -- Delete …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2005 gaps-and-islands sql-delete

5
推荐指数
1
解决办法
204
查看次数

将websocket库更新到最新版本

我在Ubuntu上运行Go编译器,使用安装 sudo apt-get install golang

我已成功编译并执行了一个Trivial示例服务器的代码(请参阅http://golang.org/pkg/websocket/#Handler)

package main

import (
    "http"
    "io"
    "websocket"
)

// Echo the data received on the Web Socket.
func EchoServer(ws *websocket.Conn) {
    io.Copy(ws, ws);
}

func main() {
    http.Handle("/echo", websocket.Handler(EchoServer));
    err := http.ListenAndServe(":12345", nil);
    if err != nil {
        panic("ListenAndServe: " + err.String())
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法使用我的Chromium版本(16.0.912.77)连接到服务器.我假设Chrome已经实现了RFC 6455 Websocket(版本13),但是Ubuntu golang包中的go websocket库已经过时了.

所以,我的问题是:如何只将websocket包更新到最新版本?

package go websocket

5
推荐指数
1
解决办法
2954
查看次数

Go中的原子比较和交换结构

我想创建一个非阻塞队列包描述使用算法通过马吉德·M. Michael和迈克尔·L.·斯科特并发应用在这里.

这需要使用"sync/atomic"包提供的原子CompareAndSwap .
但是我不确定以下伪代码的Go等价物是什么:

E9:   if CAS(&tail.ptr->next, next, <node, next.count+1>)
Run Code Online (Sandbox Code Playgroud)

其中tailnext类型:

type pointer_t struct {
    ptr   *node_t
    count uint
}
Run Code Online (Sandbox Code Playgroud)

并且node是类型:

type node_t struct {
    value interface{}
    next  pointer_t
}
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,似乎我需要用一个结构(一个指针和一个uint)来做一个CAS .使用atomic-package 可以实现这一点吗?

感谢帮助!

queue struct go compare-and-swap

5
推荐指数
1
解决办法
4147
查看次数

在Go中将**T转换为*unsafe.Pointer

如何将类型变量转换**T*unsafe.Pointer

下面的示例将给出编译错误:

无法将&ptr(类型**s)转换为*unsafe.Pointer类型

package main

import (
    "sync/atomic"
    "unsafe"
)

type s struct {
    value int
}

func main(){
    var ptr *s
    a := &s{42}

    old := ptr
    atomic.CompareAndSwapPointer(
        (*unsafe.Pointer)(&ptr), // &unsafe.Pointer(ptr)
        unsafe.Pointer(old),
        unsafe.Pointer(a))
}
Run Code Online (Sandbox Code Playgroud)

如果我切换(*unsafe.Pointer)(&ptr)&unsafe.Pointer(ptr),我将得到此编译错误:

不能取不安全的地址.Pointer(ptr)

PS.我选择做一个例子,sync/atomic因为这是你必须进行这种转换的一种情况.

编辑

一个不正确的解决方案是使用临时变量:

up := unsafe.Pointer(ptr)
atomic.CompareAndSwapPointer(&up, ...
Run Code Online (Sandbox Code Playgroud)

在编译时,CAS只会交换存储的内容up而不是内存中的内容ptr.这不是理想的结果,正如zeebo @#go-nuts所指出的那样.

pointers type-conversion unsafe-pointers go

5
推荐指数
1
解决办法
2706
查看次数

Postgres 中使用自引用外键删除

对于带有自引用外键的表:

CREATE TABLE tree (  
    id INTEGER,
    parent_id INTEGER,
    PRIMARY KEY (id)  
);

ALTER TABLE tree 
   ADD CONSTRAINT fk_tree
   FOREIGN KEY (parent_id) 
   REFERENCES tree(id);

INSERT INTO tree (id, parent_id)
VALUES (1, null),
       (2, 1),
       (3, 1),
       (4, 2),
       (5, null),
       (6, 5);
Run Code Online (Sandbox Code Playgroud)

我希望通过递归遍历树来删除分支,因为我可能不会使用ON DELETE CASCADE.

WITH RECURSIVE branch (id, parent_id) AS (
      SELECT id, parent_id
      FROM tree
      WHERE id = 1 -- Delete branch with root id = 1

      UNION ALL SELECT c.id, c.parent_id
      FROM tree c -- …
Run Code Online (Sandbox Code Playgroud)

sql postgresql recursive-query common-table-expression

5
推荐指数
1
解决办法
2639
查看次数