They don't solve the same problem. The Wave protocol is a higher-level document-based protocol and WebSockets are a transport layer. In fact they can be used together:
http://www.waveprotocol.org/protocol/design-proposals/client...
To explain at greater length, WebSockets are much simpler. If you wanted to do something simple, like let your website's users chat with each other, you could whip something up with WebSockets. If you wanted to do something complicated, like a real-time cooperative game, you could use WebSockets as the basic structure that you would built a more complicated messaging system on top of. A WebSocket is a two-ended pipe, client to server, and if you want a more complicated network structure you have to create that yourself.
The Wave protocol is much more complicated and aimed at a more specific case. It is built on the idea of shared documents which is at a higher level than sockets. It contains specifications for things like cursors and deleting segments of text in documents. If you were building a system that did not have something akin to shared documents, it would probably not make sense to use the Wave protocol. But if you were building a system based on shared documents, like an EtherPad clone, then the Wave protocol might be perfect and save you a lot of work.
They are not really direct competitors like JSON vs XML. It is more like comparing HTTP to XML. You could operate the Wave protocol over WebSockets, just like you could send XML over HTTP.